我有一个作者页面,显示数据库中的所有作者。
<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_many
和belongs_to
在author.rb,book.rb和authorbook.rb的模型中保存作者和书籍之间的关系。< / p>
我希望作者的展示页面能够显示与他们相关的每本书。
我该怎么做?我是新手,还在学习,所以请记得在回答时。提前致谢。
每种型号的EDIT型号代码:
author.rb
class Author < ActiveRecord::Base
attr_accessible :name
validates :name, :presence => true
has_many :authorbooks
has_many :books, :through => :authorbooks
end
book.rb
class Book < ActiveRecord::Base
attr_accessible :name
validates :name, :presence => true
has_many :authorbooks
has_many :authors, :through => :authorbooks
end
authorbook.rb
class Authorbook < ActiveRecord::Base
attr_accessible :author_id, :book_id
belongs_to :book
belongs_to :author
end
答案 0 :(得分: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指南中的eager loading章节。
注2:结账HAML;比ERB好得多。