3

假设我有以下型号:

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在孩子的模型中。我真傻。感谢您抽出宝贵时间发表评论和回答,伙计们。下次我会在此处发布问题之前更仔细地查看。

4

1 回答 1

9

这正是你的做法。

它不起作用的事实表明存在一些潜在的问题,阻止@child了父母的存在。

首先,检查表是否Child有外键。外键列(在这种情况下parent_id)应始终位于具有belongs_to关联的模型上。

其次,检查您要获取的孩子是否确实有父母。这意味着外键 ( parent_id) 不应为 nil。如果它有一个数值,请检查表中是否Parent有一条与foreign_key 中的值相同的记录Child

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

于 2010-12-26T02:16:25.880 回答