Не могу получить доступ к родителю ребенка через has_one - PullRequest
1 голос
/ 07 января 2011

У меня здесь запутанная проблема. У меня есть две модели с отношением has_one. У меня есть форма, которая использует fields_for для создания дочернего экземпляра. Однако, когда я пытаюсь получить доступ к родителю из дочерней модели, он получает только ноль.

Я попытался привести краткий и простой пример проблемы ниже:

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

Почему отношения возвращаются как ноль?

Ответы [ 2 ]

1 голос
/ 06 августа 2013

Попробуйте добавить атрибут inverse_of для каждой стороны ассоциации:

в родительской модели:

 has_one :child, :inverse_of => :parent

в дочерней модели:

 belongs_to :parent, :inverse_of => :child

Здесь ищите «Двунаправленные отношения»: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Надеюсь, это поможет!

1 голос
/ 07 января 2011

Я не уверен, но попытка с self.parent.name.equals?("mum")

self может быть неявной, поэтому это может быть не ваше решение.

EDIT: В вашембаза данных, вы уверены, что столбец parent_id в childs таблице не является нулевым?Если это так, то обычно self.parent возвращает ноль.Нет, я имею в виду.

...