.where()
메서드를 사용하여 연결된 모델 데이터를 검색하는 방법을 알 수 없습니다. 이 예에서는 프로젝트레일 4 : includes() with where() with associated objects 검색하는 방법
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
/뷰/프로젝트/invite.html.erg <%= debug(@project) %>
반환 ... 사용자 belongs_to :
--- !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"와 같은 느낌이 들지 않습니다. 뭐야?
솔루션 내 최초의 질문 (이 배열로 모든 번들 때문에 CakePHP를 작동) debug()
가 연관된 객체를 반환 할 것이라는 잘못된 가정하에 공식화했다.
그래서 내 원래 코드 은이어야합니다. 그러나 나는 테이블에 정리 된 외래 키의 이름을 잘못 지정했다. 마이 그 레이션 방법 t.belongs_to
(올바르게 명명 된 foreign_key 필드 인 이 아닌 필드가 "belongs_to"인 경우)을 보면 혼동을 느낍니다. 그래서 나는 그 열의 이름을 user_id
으로 바꿔야 만했습니다. 이제는 아래의 @ Veraticus의 대답에서 설명한대로 작동합니다.
보여줄까요? @ project.user를 보여주는 디버그 출력을 원한다는 것을 의미합니까? 아니면 당신의'where'와'includes'가 작동하지 않는다고 말하는 겁니까? 디버그를 위해'user' 연관을 보여주고 싶다면 여분의'user.where ... '를하지 말고'% = debug (@ project.user) %>'를 시도 했습니까? – lurker
프로젝트 개체가 하나만있는 경우 포함되어 있지 않습니다.여러 프로젝트를 선택하고 하나의 쿼리로 모든 사용자를로드하려는 경우 의미가 있습니다. 또는 당신이 어떻게'include'를 사용하고 있는지, 당신이 기억하기를 바랍니다. – juanpastas
답안은 더 이상 단일 쿼리를 생성하지 않지만,이 접근법은 http://blog.arkency.com/2013/12/rails4-preloading/ – hakunin