是否有可能通過動態查找/創建方法跳過驗證?如何跳過驗證w/find_or_create_by_?
例如定期保存我可以這樣做:
p = Post.new
p.title = nil
p.body = nil
p.save(:validate => false)
很想做同樣的find_or_create_by_title
。
是否有可能通過動態查找/創建方法跳過驗證?如何跳過驗證w/find_or_create_by_?
例如定期保存我可以這樣做:
p = Post.new
p.title = nil
p.body = nil
p.save(:validate => false)
很想做同樣的find_or_create_by_title
。
它看起來可能與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
祝你好運,讓我知道如果你需要更多的指針正確的方向。
對於某些情況下,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」,所以它會與驗證工作,同時添加條目的任何變化。
使用這個,你可以通過傳遞一個參數來使用它,有和沒有驗證。
非常感謝。我就這樣走了!感謝您花時間回答。 –