ruby-on-rails - 如何通过 Rails3 中的 has_one 关联找到 child 的 parent ?

标签 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 检索 parent ,但执行以下操作失败: 我通过 Controller 通过以下方式找到模型

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

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

在我看来,我想像这样检索 child 的 parent :

@child.parent

我该怎么做呢?

谢谢!


更新:我的示例(当我决定启动一个新应用程序并创建它时)实际上运行良好。 在我的实际应用程序中,我忘记在 child 的模型中包含 belongs_to :parent 。我真傻。感谢您抽出宝贵时间发表评论和回答,伙计们。下次在这里发问题之前我会更仔细地看。

最佳答案

这正是你的做法。

它不起作用的事实表明存在一些潜在的问题,阻止 @child 拥有 parent 。

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

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

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

关于ruby-on-rails - 如何通过 Rails3 中的 has_one 关联找到 child 的 parent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532481/

相关文章:

javascript - Sequelize v3 — 如何将 hasMany 关系的默认值设置为空列表?

ruby-on-rails - Rails 中的路由。 URL 中的点

ruby-on-rails - Rails 的 include() 不适用于动态关联条件

ruby-on-rails - 自引用关联 (Ruby on Rails)

ruby-on-rails - 如果关联不存在,如何不求和?

ruby-on-rails-3 - 用户使用 client_side_validations 登录并设计时出现 "Email is already taken"错误

ruby-on-rails - 警告 : Can't verify CSRF token authenticity

ruby-on-rails - 两种不同的布局,每种布局有一个样式表

ruby-on-rails - 从has_many中删除对象,但是不删除Rails中的原始记录?

ruby-on-rails - 无法安装 RVM。/usr/local/rvm 中的权限被拒绝