首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新期间ActiveRecord::ReadOnlyRecord (ActiveRecord::ReadOnlyRecord):

更新期间ActiveRecord::ReadOnlyRecord (ActiveRecord::ReadOnlyRecord):
EN

Stack Overflow用户
提问于 2010-12-01 21:39:10
回答 1查看 1.8K关注 0票数 1

我想我还是个新手,但我还需要你的帮助。当我和一个habtm协会一起工作时,我遇到了问题。我有一张表格,我可以在表格中输入有关计算机的信息。关联habtm是在机器和操作系统之间。

代码语言:javascript
复制
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

我用复选框显示操作系统。

我修改了机器控制器的更新

代码语言:javascript
复制
 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

但是,如果我编辑一台机器而没有更改名称,然后单击更新,我会出现以下错误:

代码语言:javascript
复制
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'

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2011-03-12 12:25:19

除了machine_idoperatingsystem_id之外,您的machines_operatingsystems表中是否还有其他列?如果是这样,ActiveRecord会将关联返回的记录标记为只读。

一个可能的罪魁祸首是连接表上的时间戳列。如果创建machines_operatingsystems的迁移包含对timestamps的调用,这可能是问题的根源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4324893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档