2010-12-01 39 views
1

我認爲我還是一個新手,但我需要你的幫助了。雖然我正與一個habtm協會合作,但我遇到了問題。我有表格輸入有關計算機的信息。協會habtm在機器和操作系統之間。ActiveRecord :: ReadOnlyRecord(ActiveRecord :: ReadOnlyRecord):在更新

class Machine < ActiveRecord::Base 
    .... 
    has_and_belongs_to_many :operatingsystems, :join_table => "machines_operatingsystems", :readonly => false 
    .... 
end 

class Operatingsystem < ActiveRecord::Base 
    .... 
    has_and_belongs_to_many :machines, :join_table => "machines_operatingsystems", :readonly => false 
    .... 
end 

我用複選框顯示操作系統。

我修改機器控制器

def update 
    params[:machine][:operatingsystem_ids] ||= [] 
    @machine = Machine.find(params[:id], :readonly => false) 
    respond_to do |format| 
    if @machine.update_attributes(params[:machine]) 
    flash[:notice] = 'Machine was successfully updated.' 
    format.html { redirect_to(@machine) } 
    format.xml { head :ok } 
    else 
    format.html { render :action => "edit" } 
    format.xml { render :xml => @machine.errors, :status => :unprocessable_entity } 
    end 
end 
end 

的更新,但是,如果我編輯機無例如變更名稱,然後單擊更新我有以下錯誤:

ActiveRecord::ReadOnlyRecord (ActiveRecord::ReadOnlyRecord): 
app/controllers/machines_controller.rb:72 
app/controllers/machines_controller.rb:71:in `update' 
passenger (2.2.15) lib/phusion_passenger/rack/request_handler.rb:92:in `process_request' 
passenger (2.2.15) lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop' 
passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:441:in `start_request_handler' 
passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:381:in `handle_spawn_application' 
passenger (2.2.15) lib/phusion_passenger/utils.rb:252:in `safe_fork' 
passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:377:in `handle_spawn_application' 
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `__send__' 
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `main_loop' 
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously' 
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:163:in `start' 
passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:222:in `start' 
passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:253:in `spawn_rails_application' 
passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:126:in `lookup_or_add' 
passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:247:in `spawn_rails_application' 
passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:80:in `synchronize' 
passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize' 
passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:246:in `spawn_rails_application' 
passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:145:in `spawn_application' 
passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:278:in `handle_spawn_application' 
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `__send__' 
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `main_loop' 
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously' 

預先感謝您的幫助。

+0

就想我注意到,在創建時它在連接表中創建了三重關係。但我不知道爲什麼。我添加了:uniq => true,但我不確定這是否遵循正確的方法... – Goueg83460 2010-12-01 16:12:31

回答

1

您的machines_operatingsystems表上是否有任何其他列,而不是machine_idoperatingsystem_id?如果有,ActiveRecord會將該關聯返回的記錄標記爲只讀。

一個可能的罪魁禍首是連接表上的時間戳列。如果創建machines_operatingsystems的遷移包括致電timestamps,那可能是您的問題的根源。