2016-04-07 9 views
2

ネストされた関連付けを持つ新しいレコードをクリーンな方法で作成する際に問題があります。これは、いくつかのネストされた団体でエンティティを作成しますRuby on Rails - このレコードを必要とするネストされた関連付けで新しいレコードを保存します。

@listing = current_user.listings.build(params[:listing].permit(ATTRIBUTES_FOR_CREATE)) 

このように、::ここでは、コントローラのコードだ

class ListingDataField < ActiveRecord::Base 
    belongs_to :listing 
    validates_presence_of :listing 
end 

しかし、私はコントローラに@listing.saveを行うとき、私はそれらのネストされたListingDataFieldエンティティの検証エラーを取得しています'リストを空白にすることはできません'。私が正しく理解していれば、AutosaveAssociationはネストされた関連付けを検証して保存し、最終的にトップレベルのエンティティを保存します。したがって、リストはまだ保存されていないので、ListDataFieldの検証に失敗します。

しかし、私はそれが正しいと思います:ListDataFieldにリストの検証があるので、これを削除することは考慮しません。その後、1

  • @listing.save(:validate => false)により、ネストされた団体 1を構築し、レコードをリスト保存するが、これは
  • の両方が同じくらいエレガントなようではありませんあまりにも醜いです - トランザクションに

    1. :私は2つのソリューションを見ることができますcurrent_user.listings.build(...)、私の質問は - このための適切なRailsの方法は何ですか?

      P.S.私は同様の質問にはSO検索が、私はいずれかを見つけることができなかった、うまくいけば、これは重複していない:)

    答えて

    3

    あなたが追加したことがあります:

    class ListingDataField < ActiveRecord::Base 
        belongs_to :listing, inverse_of: :listing_data_fields 
        validates :listing, presence: true 
    end 
    

    class Listing < ActiveRecord::Base 
        has_many :listing_data_fields, inverse_of: :listing 
    end 
    

    を。これは、検証を行う必要があります存在の仕事の。

    +0

    完璧!確かに、私はこのスイッチを何とか見逃していました – neolancer

    関連する問題