代码之家  ›  专栏  ›  技术社区  ›  Chris F.

Rails入门问题

  •  1
  • Chris F.  · 技术社区  · 14 年前

    我是一个铁路新手,我一直在寻找这个问题的答案。以下是我的资料:

    class Item < ActiveRecord::Base
      belongs_to :book
    
    class Book < ActiveRecord::Base
      has_many :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中引用它们:

    未定义的方法“book”# <Array:0x10427f998 gt;

    我觉得答案很简单,但到目前为止我还没弄清楚。你们有没有意识到这方面的指导?

    谢谢您!

    3 回复  |  直到 14 年前
        1
  •  5
  •   Ryan McGeary    14 年前

    在您的视图中,当您遍历 @items 只需参考每本书。实例EB app/views/items/index.html.erb ):

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

    如果您的目的是显示每本书及其下的相关项目,那么最好使用 index 在上的操作 BooksController .找到所有的书,迭代每本书,对于每本书,迭代该书的项目。

        2
  •  1
  •   Brian Kelly    14 年前

    项目数组没有书籍,每个项目都有。看起来你想买一本不存在的书。

    尝试 @items[0].book 或者在视图中使用循环:

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

    还可以使用分部对数组进行迭代。请参见“渲染部分集合”一节 http://api.rubyonrails.org/classes/ActionView/Partials.html

        3
  •  0
  •   Kaleb Brasee    14 年前

    问题是你打电话来 items.book 在一个项数组上,并且该数组没有名为 book (因此产生了错误)。你需要从这个数组中得到一本书(比如 items[0] ,然后呼叫 .book 就这点而言。