2009-10-06 36 views
2

我想知道這是爲什麼不爲我工作:Ruby on Rails的:「find_create_by_user」

Recipe.find_or_create_by_user_id(current_user.id, :name => "My first recipe") 

創建該配方罰款,如果不通過用戶的ID存在,但名稱(「我的第一個配方「)不包含在新創建的條目中。有什麼我做錯了嗎?我無法完全理解這一點。

回答

3

你可以試試這個一對夫婦不同的方式:

Recipe.find_or_create_by_user_id_and_name(current_user.id, "My first recipe") 

Recipe.find_or_create_by_user_id(:user_id => current_user.id, :name => "My first recipe") 
+0

謝謝,邁克爾。如果用戶決定在未來改變食譜的名稱會怎樣? – Drew 2009-10-06 20:41:31

6

試試這樣說:

Recipe.find_or_create_by_user_id(current_user.id) do |recipe| 
    recipe.name = 'My first recipe' 
end 

塊將只被調用,如果它有創造紀錄。

+0

謝謝Tadman。我不知道。非常感謝! – Drew 2009-10-06 20:42:23

1

您有沒有機會在食譜模型中使用attr_accessible或attr_protected?如果名稱不可訪問,那麼當您通過批量分配將其傳入時,它不會按預期分配。

我相信這可以解釋爲什麼tadman的方法有效,而你的原始嘗試沒有。如果名稱不是你有嚴重的安全問題,你可以考慮通過attr_accessible公開它。