Rails入门问题

时间:2009-12-24 15:18:00

标签: ruby-on-rails ruby

我是铁杆的新手,我一直在寻找这个问题的答案。这就是我所拥有的:

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;

的未定义方法'book'

我觉得答案很简单,但到目前为止我还没弄明白。有没有你们知道的教程可以解决这个问题?

谢谢!

3 个答案:

答案 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