3

関連を介して has_many からモデルを検証するのに問題があります。以下は、関連するモデルです。

放送モデル

class Broadcast < ActiveRecord::Base

    attr_accessible :content,
                    :expires,
                    :user_ids,
                    :user_id

    has_many :users, through: :broadcast_receipts
    has_many :broadcast_receipts, dependent: :destroy

    validates :user_id, presence: true
    validates :content, presence: true

end

同報受信モデル

class BroadcastReceipt < ActiveRecord::Base

    belongs_to :broadcast
    belongs_to :user

    attr_accessible :user_id, :cleared, :broadcast_id

    validates :user_id      , presence: true
    validates :broadcast_id         , presence: true
end

また、ブロードキャスト レシートを通じて have_many ブロードキャスト レシートを送信するユーザーとの関連付けもあります。

問題は次の行にあるようです。

validates :broadcast_id         , presence: true

ブロードキャストを作成しようとすると、ロールバックが発生し、エラー メッセージは表示されません。ただし、上記の行を削除すると、すべてが期待どおりに機能します。

これは、ブロードキャスト受信が作成される前にブロードキャストが保存されないという問題のようです。
Broadcast_id が受信モデルに設定されていることを検証できる方法はありますか?

4

2 に答える 2

2

これは、 https ://github.com/rails/rails/issues/8828 で説明されている問題と同じようです。結合モデルの has_many 関連付けに :inverse を追加することで解決されました。

于 2013-07-20T13:43:00.367 に答える
1

コードの構造化に問題がある可能性があります。このバージョンを試してみることができます。

class Broadcast < ActiveRecord::Base
  # I assume these are the recipients
  has_many :broadcast_receipts, dependent: :destroy
  has_many :users, through: :broadcast_receipts

  # I assume this is the creator
  validates :user_id, :content, presence: true
  attr_accessible :content, :expires, :user_id, :user_ids
end

class BroadcastReceipt < ActiveRecord::Base
  belongs_to :broadcast
  belongs_to :user

  # You should be able to validate the presence
  # of an associated model directly
  validates :user, :broadcast, presence: true

  attr_accessible :cleared
end
于 2013-02-07T10:27:12.693 に答える