2009-12-24 62 views
1

我是一名新手,我一直在寻找这个问题的答案。这里是我有:Rails入门问题

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>

我有一种感觉,答案是如此简单,但到目前为止我还没有弄明白。有没有你们知道的任何教程涵盖了这个问题?

谢谢!

回答

5

在您的看法中,遍历所有@items时,只需参考每本书的书。例如ERB(app/views/items/index.html.erb):

<% @items.each do |item| -%> 
    Item: <%= item.name %> 
    Book: <%= item.book.title %> 
<% end -%> 

相反,如果你的目的是要显示每本书每本书下的相关项目,你会更好使用的BooksControllerindex行动。查找所有书籍,遍历每本书和每本书,遍历该书的项目。

+0

谢谢你的回答。我也有一些不好的数据,导致一些问题,但这完全有效。谢谢! – 2009-12-25 01:20:29

1

项目数组没有一本书,每个单独的项目。它看起来像你正试图获得所有项目的书籍,这不存在。

尝试@items[0].book或在您的视图中使用一个循环:

<ul> 
<% for item in @items %> 
    <li><%= item.book.title %></li> 
<% end %> 
</ul> 

你也可以使用部分通过数组进行迭代。请参阅http://api.rubyonrails.org/classes/ActionView/Partials.html的“渲染部分集合”一节

0

问题是你打电话items.book对一个项目的数组,并且该数组没有名为book(因此错误)的方法。您需要从该阵列中获取一本书(例如items[0]),然后在该列表上拨打.book