このようにして作成されたオブジェクトをオートセーブするのは困っています。次のモデルを持っ考えてみましょう:Rails 4カスケードは、belongs_toのバリデーションとの関連付けを保存します
class SearchTerm < ActiveRecord::Base
has_many :search_term_occurrences, dependent: :destroy
end
class SearchTermOccurrence < ActiveRecord::Base
belongs_to :search_term
validates :search_term, presence: true # Problematic validation
validates_associated :search_term # See Gotchas in answer
end
だから私は、次の操作を実行しようとすると:
term = SearchTerm.new term: 'something'
term.search_term_occurrences << [SearchTermOccurrence.new, SearchTermOccurrence.new]
term.save!
私は、次を得る:
ActiveRecord::RecordInvalid: Validation failed: Search term occurrences is invalid, Search term occurrences is invalid
しかし、ときに私はbelongs_toののSEARCH_TERMの検証を省略します。すべてが適切に保存されます。
私の質問は、関連付けられたオブジェクトを1つずつ保存せずに子オブジェクトの検証を行っている間に、親オブジェクトとその関連付け(新しく作成)を保存してから、トランザクション内に親オブジェクトを保存する方法です。 Railsにトランザクションロジックを処理させたい。
'belongs_to'の関連付けには、デフォルトでプレゼンス検証が付属しています。追加する必要はありません – ArtOfCode
これは当てはまりません。私はまだSearchTermを持たずにSearchTermOccurrenceを独自に保存することができます。 –