如何通过Rails3中的has_one关联找到孩子的父母?

时间:2010-12-26 02:05:01

标签: ruby-on-rails associations ruby-on-rails-3 belongs-to has-one

说我有以下型号:

class Parent < ActiveRecord::Base
  has_one :child
end

class Child < ActiveRecord::Base
  belongs_to :parent
end

我想通过孩子来检索父母,但是执行以下操作会失败: 我通过控制器以下列方式找到模型

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

(不确定这是否相关,但由于我使用的是浅路由,因此URL中没有parent_id)

在我看来,我想像这样检索孩子的父母:

@child.parent

我将如何做到这一点?

谢谢!


更新:我的例子(当我决定开始一个新应用并创建它时)实际上运行得很好。 在我的实际应用中,我忘了在孩子的模型中加入belongs_to :parent。我有多傻。感谢您抽出时间发表评论并回答,伙计们。下次我在发布问题之前会仔细查看。

1 个答案:

答案 0 :(得分:9)

这正是你如何做到的。

它不起作用的事实表明存在一些阻碍@child拥有父母的潜在问题。

首先,检查Child的表是否有外键。外键列(在本例中为parent_id)应始终位于具有belongs_to关联的模型上。

其次,检查您提取的孩子是否实际拥有父母。这意味着外键(parent_id)不应该为零。如果它具有数值,请检查Parent的表是否具有与Child中的foreign_key具有相同值的记录。

您还可以使用Rails控制台(应用程序目录中的rails console)来仔细检查关联。做Child.first.parent并看看发生了什么。当然,您也可以开始使用Parent.first.childChild.find(123).parent等变体,但不能使用params