2011-09-16 22 views
0

在我的rails用戶模型中,我試圖編寫一個方法,它將返回當前時間框架的列表,並且在沒有對於那個時間段列表,創建一個其與用戶相關聯,然後返回它:在rails用戶模型中調用ActiveRecord :: Create()而不是將新對象與用戶關聯

class User < ActiveRecord::Base 

def todaysList 
    today = Time.new 
    if self.lists.where(:date => today.to_date) 
     return self.lists.where(:date => today.to_date).first #Get the object, not the ActiveRecord::Relation 
    else 
     self.lists.create!(:date => today.to_date) #Make the list, return it! 
    end 
end 

我的問題是,爲什麼當我打電話self.lists.create(:富=>'酒吧'),用戶關聯沒有被填充?

我決定解決這個更馬虎的方法,通過顯式分配創建用戶!呼叫,因此:

self.lists.create!(:date => today.to_date, :User_ID = self.id) 

但是,這種解決方案似乎並不正確。

在此先感謝您,並且一如既往地爲愚蠢,多餘或措辭不佳的問題道歉。

+0

您所顯示的代碼*應該在其創建的列表上設置user_id。你看到的是什麼讓你覺得它不是? – Emily

+0

我可以通過查看導軌控制檯中生成的對象來判斷它沒有填充。列表的索引視圖顯示了當前列表,每次調用視圖時,都將調用用戶模型中的todaysList方法,找不到與滿足要求的當前用戶關聯的列表,然後創建一個新列表。所以每次刷新列表索引視圖時,當前列表的ID都會增加。奇怪的。 – Chazu

回答

1

我會做這樣的事情:

def todays_list 
    lists.find_or_create_by_date(Date.today) 
end 

的方法名稱的改變僅僅是偏好。

+0

非常酷。顯然這更清潔。從用戶模型調用'self.lists.find_or_create_by_foo('bar')仍然不會填充用戶關聯,但可以通過在調用finder時指定creator來輕鬆完成。 我仍然很想知道爲什麼self.create不填充用戶關聯。我相信這是一個原因,儘管這對我來說似乎並不直觀。 – Chazu

相關問題