我是铁杆的新手,我一直在寻找这个问题的答案。这就是我所拥有的:
class Item < ActiveRecord::Base
belongs_to :book
class Book < ActiveRecord::Base
has_many :items
现在,我想列出所有具有属性的项目以及与之关联的书籍。它们将在items_controller.rb
中的索引下class ItemsController < ApplicationController
# GET /items
# GET /items.xml
def index
@items = Item.all
现在我如何处理ItemsController中的书籍,以便我可以在index.html.erb中列出它们,记住一个项目只属于一本书?如果我补充:
@books = items.book.find
在@items = Item.all下,所以我可以在index.html.erb中引用它们我得到:
#<Array:0x10427f998
&gt;
我觉得答案很简单,但到目前为止我还没弄明白。有没有你们知道的教程可以解决这个问题?
谢谢!
答案 0 :(得分:5)
在您看来,当您遍历所有@items
时,只需参考每本书。示例ERB(app/views/items/index.html.erb
):
<% @items.each do |item| -%>
Item: <%= item.name %>
Book: <%= item.book.title %>
<% end -%>
如果您打算在每本书下显示每本书以及相关项目,那么最好使用index
上的BooksController
操作。查找所有书籍,遍历每本书,并为每本书迭代该书的项目。
答案 1 :(得分:1)
项目数组没有书籍,每个项目都有。看起来你正试图获得所有不存在的项目的书。
尝试@items[0].book
或在视图中使用循环:
<ul>
<% for item in @items %>
<li><%= item.book.title %></li>
<% end %>
</ul>
您也可以使用partial来遍历数组。请参阅http://api.rubyonrails.org/classes/ActionView/Partials.html
上的“渲染部分集合”部分答案 2 :(得分:0)
问题是你在一个项目数组上调用items.book
,并且该数组没有名为book
的方法(因此错误)。您需要从该数组中获取一本书(例如items[0]
),然后在其上调用.book
。