我在爲活動記錄關聯進行佈線時經常遇到問題,我期待着最終了解是什麼導致了它(而不僅僅是解決它)。爲什麼我需要重新加載這個兒童關聯?
當通過parent.children < <將孩子與父母關聯時,對孩子的引用正確地更新自己。如果關係建立反向(如果通過child.parent =完成),則這不起作用。
爲什麼會發生這種情況?有沒有辦法使雙方的關係?我試過inverse_of
以前沒有成功。我希望是因爲我對這裏發生的事情不夠了解。
例子:
鑑於這些模型:
class Task < ActiveRecord::Base
belongs_to :batch
attr_accessor :state
end
class Batch < ActiveRecord::Base
has_many :tasks
def change_tasks
tasks.each { |x| x.state = "started" }
end
end
爲什麼第一規格失敗,但第二遍?我可以進行第一次傳球嗎?出於某種原因,我需要重新加載第一個規格,但不是在第二個規格。
describe "avoiding reload" do
context "when association established via child.parent=" do
it "updates child references" do
b = Batch.create
t = Task.create(batch: b)
b.change_tasks
b.tasks[0].state.should == "started" # passes
t.state.should == "started" # fails!?
t.reload.state.should == "started" # passes, note the reload
end
end
context "when association established via parent.children<<" do
it "updates child references" do
b = Batch.create
t = Task.create
b.tasks << t
b.change_tasks
b.tasks[0].state.should == "started" # passes
t.state.should == "started" # passes
end
end
end
感謝您的幫助。