1

次のコードを見てください (Rails 3.0.10):

User < AR
  has_many :providers

Provider < AR
  belongs_to :user
  validates_presence_of :user

user = User.new
user.providers.build
# so both models not yet saved but associated with each other

user.valid?
=> false

user.errors
=> {:providers=>["is invalid"]}

user.providers.first.errors
=> {:user_id=>["can't be blank"]}

まだ保存されていない関連付けられたユーザー モデルが利用可能であることをプロバイダーが認識できないのはなぜですか? または言い換えれば、検証がまだ存在するようにするにはどうすればよいですか?それとも、私は何か間違ったことをしていますか?

私はクリーンなソリューションを探していることに注意してください。そのため、ユーザーモデルをデータベースに保存するプロバイダーモデルで検証前のコールバックを提案することはできません。

4

1 に答える 1

5

:inverse_of を使用

class User < ActiveRecord::Base
  has_many :providers, :inverse_of => :user
end

class Provider < ActiveRecord::Base
  belongs_to :user, :inverse_of => :providers
  validates :user, :presence => true
end
于 2012-05-25T12:29:24.883 に答える