Как найти родителя ребенка через ассоциацию has_one в Rails3? - PullRequest
3 голосов
/ 26 декабря 2010

Скажем, у меня есть следующие модели:

class Parent < ActiveRecord::Base
  has_one :child
end

class Child < ActiveRecord::Base
  belongs_to :parent
end

Я хотел бы получить родительский объект через дочерний элемент, но выполнить следующее не удалось: Я нашел модель следующим образом через контроллер

@child = Child.find(params[:child_id])

(Не уверен, что это актуально, но поскольку я использую мелкую маршрутизацию, parent_id недоступен в URL)

На мой взгляд, я хотел бы получитьродитель ребенка, как это:

@child.parent

Как бы я поступил так?

Спасибо!


Обновление: мой пример (когда я решил начатьновое приложение и создать его) на самом деле работает отлично.В моем настоящем приложении я забыл включить belongs_to :parent в модель ребенка.Как глупо с моей стороны.Спасибо, что нашли время, чтобы прокомментировать и ответить, ребята.В следующий раз я посмотрю более внимательно, прежде чем публиковать вопрос здесь.

1 Ответ

9 голосов
/ 26 декабря 2010

Это именно то, как вы это делаете.

Тот факт, что он не работает, предполагает наличие некоторой основной проблемы, препятствующей @child иметь родителя.

Прежде всего, проверьте, что таблицаChild имеет внешний ключ.Столбец внешнего ключа (в данном случае parent_id) всегда должен быть в модели, имеющей ассоциацию belongs_to.

Во-вторых, убедитесь, что у выбранного вами ребенка действительно есть родитель.Это означает, что внешний ключ (parent_id) не должен быть равен нулю.Если оно имеет числовое значение, убедитесь, что в таблице для Parent есть запись с тем же значением, что и для Foreign_key в Child.

. Вы также можете использовать консоль Rails (rails console из своего приложениясправочник) перепроверить ассоциации.Сделайте Child.first.parent и посмотрите, что происходит.Конечно, вы можете начать использовать варианты, такие как Parent.first.child или Child.find(123).parent, но вы не можете использовать params.

...