2014-02-09 3 views
0

을 통해 속성이 필요합니다. User.books를 할 때 책 모음을 얻지 만 has_read, rating 등의 UserBooks에 설정된 속성 (book.name, book.author)에 액세스 할 수 없습니다.has_many는 thorugh 나는 세 가지 모델이 클래스

어떻게 읽습니까? Books 및 UserBooks 모두

+0

중복 된 http://stackoverflow.com/questions/18799934/has-many-through-how-do-you-access-join-table-attributes – svoop

+0

그 중 하나는 작동하지 않는 것 같습니다. –

답변

0

원하는 작업은 조인 모델을 사용하여 다음과 같은 작업을 수행하는 것입니다. 컨트롤러에서 : 뷰에서 다음

@user_books = @user.user_books.includes(:books) 

이 같은 일을 할 수있다 (이 총 2 개 쿼리의 결과로 user_books가 필요로하는 책을 캐시하기 때문에이 포함되어 사용이 n+1 queries 문제를 방지) :이 책의 방법을 포함하려면

<%= @user_books.each do |user_book| %> 
    <div class="<%= 'read' if user_book.has_read? %>"> 
    <h2><%= user_book.book.name %> <small>by <%= user_book.book.author %></h2> 
    <span><%= user_book.rating %></span> 
    </div> 
<%= end %> 

당신과 같이 delegate을 사용할 수

class UserBook < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :book 

    delegate :has_read, to: :book 
    delegate :author, to: :book 
end 

http://api.rubyonrails.org/classes/Module.html#method-i-delegate

그런 다음 당신이 할 수있는 다음 :

다음
@books = @user.user_books.includes(:books) 

보기 :

<%= @books.each do |book| %> 
    <div class="<%= 'read' if book.has_read? %>"> 
    <h2><%= book.name %> <small>by <%= book.author %></h2> 
    <span><%= book.rating %></span> 
    </div> 
<%= end %> 

이제 우리는 컨트롤러와 뷰에서 "도서"를 호출하지만, 그것의 이해 "UserBook"개체.

+0

실제로 user_books 속성을 원했습니다. 같은 변수에있는 책과 함께 그래서 나는 book.name과 book.has_read를 user_book.book.has_read를 사용하여 할 수 있습니다. 두 개의 다른 객체의 속성을 사용하여 새 객체를 만들 수있는 방법 –

+0

업데이트 된 답변 확인 – omarvelous

관련 문제