Adr*_*fin 8 activerecord ruby-on-rails-3
我正在尝试将我的应用程序从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
Run Code Online (Sandbox Code Playgroud)
在控制器的编辑方法中,我执行以下代码:
def edit
@client = params[:type].classify.constantize.find params[:id]
@client.contact_address = Address.new(:kind => 2) if @client.contact_address.blank?
end
Run Code Online (Sandbox Code Playgroud)
在这段代码的第二行,我收到错误:
Failed to save the new associated contact_address.
Run Code Online (Sandbox Code Playgroud)
所以似乎@ client.contact_address的赋值以某种方式在contact_address对象上触发了save方法......我不希望这样......这是一些新的Rails 3.1.x行为吗?我希望只有在我调用.save时才能保存相关对象!在父模型上 - 这对我来说太神奇了.我可以在某处禁用此行为吗?
我找到了解决方法.在控制器编辑方法中,我使用了build方法而不是赋值:
def edit
@client = params[:type].classify.constantize.find params[:id]
@client.build_contact_address(:kind => 2) if @client.contact_address.blank?
end
Run Code Online (Sandbox Code Playgroud)
但我仍然有兴趣在某处阅读这种新行为(我的谷歌搜索不成功).也许有人可以提供链接?
| 归档时间: |
|
| 查看次数: |
2864 次 |
| 最近记录: |