1

ここで紛らわしい問題があります。has_one 関係を持つ 2 つのモデルがあります。fields_for を使用して子インスタンスを作成するフォームがあります。ただし、子モデルから親にアクセスしようとすると、nil しか取得されません。

以下の問題の簡潔で簡単な例を提供しようとしました:

class Parent
  has_one :child
  accepts_nested_attributes_for :child
  attr_accessible :child_attributes
end

class Child
  belongs_to :parent
  validate :parent_is_called_mum

  def parent_is_called_mum
    parent.name.equals?("mum")
  end
end

問題は、parent.name.equals?("mum")がエラーを返すことです:

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.name

関係が nil として返されるのはなぜですか?

4

2 に答える 2

1

アソシエーションの両側に属性inverse_ofを追加してみてください。

親モデル:

 has_one :child, :inverse_of => :parent

子モデル:

 belongs_to :parent, :inverse_of => :child

ここで、「双方向の関係」を探します: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

それが役立つことを願っています!

于 2013-08-06T11:30:30.820 に答える
1

よくわかりませんが、試してみてくださいself.parent.name.equals?("mum")

self は暗黙的である可能性があるため、これは解決策ではない可能性があります。

編集:データベースで、テーブルの列が null ではないことを確認してparent_idchildsますか? そうであれば、self.parent が null を返すのは正常です。ゼロというか。

于 2011-01-07T14:45:58.157 に答える