1

我有一个作者页面,显示数据库中的所有作者。

<h1>Listing authors</h1>

<table>
  <tr>
    <th>Name</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @authors.each do |author| %>
  <tr>
    <td><%= author.name %></td>
    <td><%= link_to 'Show', author %></td>
    <td><%= link_to 'Edit', edit_author_path(author) %></td>
    <td><%= link_to 'Destroy', author, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>
</table>

<%= link_to 'New Author', new_author_path %>

对于每个作者,您单击显示,以显示他们自己的页面。

<p>
  <b>Name:</b>
  <%= @author.name %>
</p>

<%= link_to 'Edit', edit_author_path(@author) %> |
<%= link_to 'Back', authors_path %>

现在我为书籍设置了相同的设置,用户可以在其中输入新书籍,在数据库中显示和编辑书籍。

然后我建立了一个名为 authorbooks 的模型,它使用has_manybelongs_to在 author.rb、book.rb 和 authorbook.rb 的模型中保存作者和书籍之间的关系。

我希望作者的显示页面显示与他们相关的每一本书。

我该怎么办?我是 Rails 新手,还在学习,所以请记住回答。提前致谢。

编辑每个模型的模型代码:

作者.rb

class Author < ActiveRecord::Base
  attr_accessible :name

  validates :name, :presence => true

  has_many :authorbooks
  has_many :books, :through => :authorbooks
end

书本.rb

class Book < ActiveRecord::Base
  attr_accessible :name

  validates :name, :presence => true

  has_many :authorbooks
  has_many :authors, :through => :authorbooks
end

作者书.rb

class Authorbook < ActiveRecord::Base
  attr_accessible :author_id, :book_id

  belongs_to :book
  belongs_to :author
end
4

1 回答 1

2

看到模型代码也会很有趣。我假设你有类似的东西:

class Author
  has_many :author_books
  has_many :books, :through => :author_books # this line might be missing,
                                             # read in the api documentation about it.

class AuthorBooks
  belongs_to :author
  belongs_to :book

现在您可以执行以下操作:

<h3>Related books</h3>

<ul>
  <% @author.books.each do |book| %>
    <li><%= book.name %> <%= link_to "Details", book_path(book) %></li>
  <% end %>
</ul>

如果没有这:through条线,您可以执行以下操作:

@author.author_books.each do |ab|
  ... ab.book.name ...

注意 1:第二个示例会出现 N+1 负载问题。有关更多信息,请参阅 A::R 指南中的急切加载章节。

注2:结帐HAML;比ERB好很多

于 2012-09-27T09:03:07.503 回答