在rails 3.0.9/ruby 1.9.2當我嘗試更新模型外鍵時,出現意外的行爲。Rails3 activerecord update_attributes無法保存foreign_key
我開始一個新的安裝在app /型號
$ rails new mytest
$ rails g model User
$ rails g model Ad user_id:integer
$ rake db_migrate
添加關聯/ Ad.rb
Class User < ActiveRecord::Base
belongs_to :user
end
現在到了有趣的部分。我想直接更改對象上的外鍵。我進入軌道控制檯軌道ç
$ u = User.create
$ a=Ad.create(:user=>u)
$ a.update_attributes(:user_id => 9999)
$ a.user_id
=> 4
所以這是行不通的。我嘗試直接設置對象而不是傳遞它來創建:
$ u = User.create
$ a=Ad.create
$ a.user = u
$ a.save
$ a.update_attributes(:user_id => 9999)
$ a.user_id
=> 5
不起作用。
的作品的唯一事情是這樣的:
$ u = User.create
$ a=Ad.create
$ a.user_id = u.id
$ a.save
$ a.update_attributes(:user_id => 9999)
$ a.user_id
=> 9999
能有人請解釋是怎麼回事,我怎麼可以改變我的對象的外鍵?我假設當對象關聯被實例化並且存在衝突時發生「阻塞」行爲,所以一個答案是這樣做的:
$ Ad.find(a.id).update_attributes(:user_id => xxxx)
這是有效的。但是,在一個對象上更改外鍵看起來還有很長的路要走。它還需要額外的數據庫命中,最後如果對象內部需要自行更新,則代碼非常混亂。該怎麼辦?
順便說一下之前就卸載加載的對象:我就遇到了這個問題的原因是,我從機械師切換到FactoryGirl。機械師不會在創建時加載關聯的對象,但FactoryGirl會這樣做。 – user681814