Ruby on Rails:显示2个模型之间的关系

时间:2012-09-27 08:56:01

标签: ruby-on-rails ruby models has-many belongs-to

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

<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的模型中保存作者和书籍之间的关系。< / 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

1 个答案:

答案 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好得多。