2011-08-23 24 views

回答

13

它看起來可能與code in Rails right now但是你可能有更好的運氣在你如何編寫代碼更詳細一點。您可以使用find_or_initialize_by_創建一個新的對象,但不保存它。然後,您可以調用您的自定義選項保存,也是在documentation他們有一個整潔的示範,是很難找到,所以我將在下面包括它:

# No 'Winter' tag exists 
winter = Tag.find_or_initialize_by_name("Winter") 
winter.new_record? # true 

祝你好運,讓我知道如果你需要更多的指針正確的方向。

+0

非常感謝。我就這樣走了!感謝您花時間回答。 –

1

對於某些情況下,find_or_initialize_by_將無用,需要跳過驗證find_or_create_by

對於這一點,你可以使用下面ROR的可選流程和方法:

  • 更新你的模型是這樣的:

類崗位<的ActiveRecord :: Base的

attr_accessor: skip_validation
belongs_to:用戶
validates_presence_of:title, 除非:skip_validation

  • 現在,您可以使用它像這樣:
    Post.where(user_id: self.id).first_or_create!(skip_validation: true)

我用first_or_create代替find_or_create_by這裏。你可以通過這個傳遞更多的列名和值,你的驗證將不會使用這個。

  • 您可以繼續而不強參數結束,沒有必要允許這種「skip_validation」,所以它會與驗證工作,同時添加條目的任何變化。

  • 使用這個,你可以通過傳遞一個參數來使用它,有和沒有驗證。