我正在使用Rails 4开发一个简单的项目。我现在有两个模型 - 作者和书籍。我目前拥有它,所以模型看起来像这样:
class Author < ActiveRecord::Base
has_many :books
end
class Book < ActiveRecord::Base
belongs_to :author
end
作者控制器看起来像这样:
class AuthorsController < ApplicationController
def index
@authors = Author.all
@book = Book.find(params[:author_id])
(Not sure if the @book line is right)
end
我的架构如下所示:
create_table "authors", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "books", force: :cascade do |t|
t.string "title"
t.string "genre"
t.string "description"
t.integer "author_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
我拥有它以便我的书籍index.html.erb我可以看到写这本书的作者。例如:&lt;%= book.author.name%&gt;。这就像我想要的那样。现在我想在我的作者index.html.erb页面上做的是显示属于作者的所有书籍。
在作者的index.html.erb页面上,我有以下内容:
<h1>All Authors</h1>
<p><%= link_to "New", new_author_path, class: "btn btn-primary" %></p>
<div class="container">
<div class="row">
<% @authors.each do |author| %>
<h1><%= author.name %></h1>
<p><%= author.book.title %></p>
<%= link_to "Show", author_path(author), class: "btn btn-primary" %>
<%= link_to "Edit", edit_author_path(author), class: "btn btn-warning"
%>
<%= link_to "Delete", author_path(author), method: :delete, data: {
confirm: "Are you Sure?" }, class: "btn btn-danger" %>
<% end %>
</div>
</div>
我认为,我需要帮助的主线如下: &lt;%= author.book.title%&gt;同样,我的主要问题是如何获得它以便在我的作者索引页面上看到他们写的所有书籍?嵌套我的路线,如下:
resources :posts do
resources :comments
end
还是有另一种方式吗?感谢您的帮助,如果您需要更多信息,请告诉我们。
答案 0 :(得分:0)
我相信你会像这样循环阅读书籍:
<h1>All Authors</h1>
<p><%= link_to "New", new_author_path, class: "btn btn-primary" %></p>
<div class="container">
<div class="row">
<% @authors.each do |author| %>
<h1><%= author.name %></h1>
<% author.books.each do |book| %>
<p><%= book.title %></p>
<% end %>
<%= link_to "Show", author_path(author), class: "btn btn-primary" %>
<%= link_to "Edit", edit_author_path(author), class: "btn btn-warning"
%>
<%= link_to "Delete", author_path(author), method: :delete, data: {
confirm: "Are you Sure?" }, class: "btn btn-danger" %>
<% end %>
</div>
</div>
上述方法可行,但效率不高,因为它会导致(N + 1)查询。
解决这个问题的方法是:
在你的控制器中,
def index
@authors = Author.includes(:books)
end
这仍然会减慢您的数据库速度,但添加限制和分页可能有助于解决这个问题。