[英]Skip saving associated object if invalid on update
我有一個像這樣的人表和地址表:
class Person < ApplicationRecord
has_many :addresses, dependent: :destroy
accepts_nested_attributes_for :addresses
end
class Address < ApplicationRecord
belongs_to :person
validates :address_line_1, presence: true
end
在我的控制器中,我想更新此人及其關聯的地址,但如果地址無效且此人有效,我仍希望更新 Person 對象並使無效地址保持與以前相同,而不會遇到ROLLBACK
。
處理這個問題的最佳方法是什么? 我意識到我可以做一些邏輯來檢查地址是否無效並從參數中刪除addresses_attributes
,然后再次分配參數並保存它,但有沒有更好的方法?
has_many
關聯有一個validate
選項,您可以將其設置為 false 並根據需要處理驗證https://guides.rubyonrails.org/association_basics.html#options-for-has-many-validate
我認為您正在使用accepts_nested_attributes_for
因為您命名了addresses_attributes
參數,我個人不會將沒有驗證與此結合,您最終可能會得到無效地址。
就個人而言,我會做兩步(使用默認validate: true
配置):
編輯:如果您想使用validate: false
選項,您可能還想設置autosave: false
以便您不保存無效地址https://guides.rubyonrails.org/association_basics.html#options-for-has-many -自動保存
最終,您要么要檢查地址屬性是否有效,如果無效則將其刪除,或者單獨保存記錄。
一個常見的模式是使用表單對象選擇第二個選項。 這有助於將邏輯排除在控制器之外,並使將來更容易擴展更新Person
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.