Я не могу понять, как пользователю использовать метод .where()
для получения связанных данных модели. В этом примере Projects принадлежит_to Users...
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
В приложении /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}
), но это не похоже на "The Rails Way". Что такое?
Решение
Мой первоначальный вопрос был сформулирован под неправильным предположением о том, что debug()
будет возвращать связанные объекты (это работает в cakePHP, потому что он объединяет все в массивы).
Итак, мой исходный код должен работать. Однако я неправильно назвал внешний ключ, указанный в таблице. Я запутался, посмотрев на метод миграции t.belongs_to
(который автоматически создает правильно названное поле foreign_key, а не поле с именем "принадлежит" ). Поэтому мне также пришлось переименовать этот столбец в user_id
, и теперь он работает так, как описано в ответе @Veraticus ниже.