我有两个模型 - book.rb -
class Book < ActiveRecord::Base
belongs_to :user
end
和user.rb -
class User < ActiveRecord::Base
has_many :books
end
books_controller.rb包含
def index
@books = Book.all
end
在/books/index.html.erb我有
<%= @books.each do |books| %>
<%= book.title %>
<%= User.find(book.user_id).name %>
.....
这一切都很好 - 但我应该在控制器中有更多的逻辑吗?如果是这样,我如何将图书ID从块传递到控制器以传回用户名?
答案 0 :(得分:0)
没有必要这样做。由于您已经拥有belongs_to
关系,因此您可以将视图编写为:
<%= @books.each do |books %>
<%= book.title %>
<%= book.user.name %>
.....
答案 1 :(得分:0)
更快的方法是:
def index
@books = Book.includes(:user)
end
这将执行2个SQL查询,一个用于获取所有书籍,另一个用于获取所有关联用户。这在查询数量方面要便宜得多,因为如果您有10本书,如果您只使用Book.all
(一个用于获取所有书籍,一个用于每本书以获取其用户),则必须执行11个查询)。
视图可以保持不变:
<%= @books.each do |book| %>
<%= book.title %>
<%= book.user.name %>
.....