을 통해 속성이 필요합니다. User.books를 할 때 책 모음을 얻지 만 has_read, rating 등의 UserBooks에 설정된 속성 (book.name, book.author)에 액세스 할 수 없습니다.has_many는 thorugh 나는 세 가지 모델이 클래스
어떻게 읽습니까? Books 및 UserBooks 모두
을 통해 속성이 필요합니다. User.books를 할 때 책 모음을 얻지 만 has_read, rating 등의 UserBooks에 설정된 속성 (book.name, book.author)에 액세스 할 수 없습니다.has_many는 thorugh 나는 세 가지 모델이 클래스
어떻게 읽습니까? Books 및 UserBooks 모두
원하는 작업은 조인 모델을 사용하여 다음과 같은 작업을 수행하는 것입니다. 컨트롤러에서 : 뷰에서 다음
는@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"개체.
실제로 user_books 속성을 원했습니다. 같은 변수에있는 책과 함께 그래서 나는 book.name과 book.has_read를 user_book.book.has_read를 사용하여 할 수 있습니다. 두 개의 다른 객체의 속성을 사용하여 새 객체를 만들 수있는 방법 –
업데이트 된 답변 확인 – omarvelous
중복 된 http://stackoverflow.com/questions/18799934/has-many-through-how-do-you-access-join-table-attributes – svoop
그 중 하나는 작동하지 않는 것 같습니다. –