说我有以下型号:
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
。我有多傻。感谢您抽出时间发表评论并回答,伙计们。下次我在发布问题之前会仔细查看。
答案 0 :(得分:9)
这正是你如何做到的。
它不起作用的事实表明存在一些阻碍@child
拥有父母的潜在问题。
首先,检查Child
的表是否有外键。外键列(在本例中为parent_id
)应始终位于具有belongs_to
关联的模型上。
其次,检查您提取的孩子是否实际拥有父母。这意味着外键(parent_id
)不应该为零。如果它具有数值,请检查Parent
的表是否具有与Child
中的foreign_key具有相同值的记录。
您还可以使用Rails控制台(应用程序目录中的rails console
)来仔细检查关联。做Child.first.parent
并看看发生了什么。当然,您也可以开始使用Parent.first.child
或Child.find(123).parent
等变体,但不能使用params
。