0
我有一個ActiveRecord模型的'offer'屬於2個item的實例。項目屬於用戶。Rails before_save不叫
要約模式有以下幾點:
offered_item_id receiving_item_id offering_user_id 通過讀取商品ID,並通過這種關係會receiving_user_id
在創造我想要的Rails保存用戶的模型。
我有這樣的:
class Offer < ActiveRecord::Base
attr_accessible :offered_item_id, :receiving_item_id, :state
belongs_to :offering_user, class_name: "User"
belongs_to :receiving_user, class_name: "User"
belongs_to :offered_item, class_name: "Item"
belongs_to :receiving_item, class_name: "Item"
before_save :populate_user_ids
private
def populate_user_ids
self.receiving_user_id = self.receiving_item.user.id
self.offering_user_id = self.offered_item.user.id
end
end
但是,即使硬編碼在populate_user_ids
方法的價值似乎並沒有工作。我不知道before_save
甚至被稱爲。
我的測試通過了項目關係,但用戶關係失敗了。
見我的RSpec測試:
describe "relations" do
it { should respond_to (:offering_user) }
it { should respond_to (:offered_item) }
it { should respond_to (:receiving_user) }
it { should respond_to (:receiving_item) }
its(:offering_user) { should == offering_user } #FAILS
its(:offered_item) { should == offered_item }
its(:receiving_user) { should == receiving_user } #FAILS
its(:receiving_item) { should == receiving_item }
end
道歉,我很新的軌道上。
可能是什麼問題?
謝謝
您需要讓Rails完成處理'belongs_to'和'has_many'等關係中id的工作。你讀過http://guides.rubyonrails.org/association_basics.html嗎? – lurker
我已經爲項目做了這些,但我不想讓用戶在公共界面中訪問(以避免大規模分配),所以我試圖在幕後設置這些 –
我不確定你的意思。 Rails確實在「幕後」做到了,您可以控制用戶在視圖中看到的內容。但是對於你原來的問題,你是否在你的'before_save'中試着'puts'來看它是否被調用?很難分辨出可能發生的情況,而不知道控制器的外觀。 – lurker