2009-12-24 78 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