加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 在Rails版本之间迁移后,ActiveRecord关联在

发布时间:2020-12-16 19:13:16 所属栏目:百科 来源:网络整理
导读:我正在尝试将我的应用程序从Rails 3.0.7迁移到Rails 3.1.3.我有客户端模型 class Client::Client ActiveRecord::Base has_one :contact_address,:class_name = "Address",:foreign_key = :client_id,:conditions = ["kind = ? and state = ?",2,1] end 在控
我正在尝试将我的应用程序从Rails 3.0.7迁移到Rails 3.1.3.我有客户端模型
class Client::Client < ActiveRecord::Base
  has_one :contact_address,:class_name => "Address",:foreign_key => :client_id,:conditions => ["kind = ? and state = ?",2,1]    
end

在控制器的编辑方法中,我执行以下代码:

def edit
  @client = params[:type].classify.constantize.find params[:id]
  @client.contact_address = Address.new(:kind => 2) if @client.contact_address.blank?
end

在这段代码的第二行,我收到错误:

Failed to save the new associated contact_address.

所以似乎@ client.contact_address的赋值以某种方式在contact_address对象上触发了save方法……我不希望这样……这是一些新的Rails 3.1.x行为吗?我希望只有在我调用.save时才能保存相关对象!在父模型上 – 这对我来说太神奇了.我可以在某处禁用此行为吗?

解决方法

我找到了解决方法.在控制器编辑方法中,我使用了构建方法而不是赋值:
def edit
  @client = params[:type].classify.constantize.find params[:id]
  @client.build_contact_address(:kind => 2) if @client.contact_address.blank?
end

但我仍然有兴趣在某处阅读这种新行为(我的谷歌搜索不成功).也许有人可以提供链接?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读