我不知道如何使用该.where()
方法来检索关联的模型数据。在此示例中,项目 belongs_to 用户...
class Project < ActiveRecord::Base
belongs_to :user
has_many :videos
end
class User < ActiveRecord::Base
has_many :projects
end
class ProjectsController < ApplicationController
def invite
@project = Project.includes([:user]).where( {:hashed_id=>params[:id]} ).first
end
end
在 App/views/projects/invite.html.erg<%= debug( @project ) %>
返回:
--- !ruby/object:Project
attributes:
id: 22
name: Some Project Name
belongs_to: 1
instructions: Bla bla bla
active: true
max_duration: 2
max_videos:
created_at: 2013-08-26 15:56:50.000000000 Z
updated_at: 2013-08-26 15:56:50.000000000 Z
hashed_id: '1377532589'
关联的用户哈希/数组不应该包含在其中吗?我知道我可以通过调用第二个find
/ where
( @project.user = User.where( {:id=>@project.belongs_to}
) 来手动添加它,但这感觉不像“Rails 方式”。什么是?
解决方案
我最初的问题是在返回关联对象的错误假设下制定的debug()
(这在 cakePHP 中有效,因为它将所有内容捆绑到数组中)。
所以我的原始代码应该可以工作。但是,我错误地命名了表中的外键。查看迁移方法t.belongs_to
(它会自动创建正确命名的 foreign_key 字段,而不是名为“belongs_to”的字段),我感到困惑。因此,我还必须将该列重命名为user_id
,现在它就像下面@Veraticus 的回答中描述的那样工作。