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