Rails Начало работы Вопрос - PullRequest
       6

Rails Начало работы Вопрос

1 голос
/ 24 декабря 2009

Я новичок в рельсах, и я искал ответ на этот вопрос. Вот что у меня есть:

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, который я получаю:

неопределенный метод 'book' для # <Array:0x10427f998>

У меня такое ощущение, что ответ такой простой, но до сих пор я его не понял. Ребята, есть ли у вас какое-нибудь учебное пособие по этому вопросу?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 24 декабря 2009

По вашему мнению, когда вы перебираете все свои @items, просто ссылайтесь на книгу для каждого из них. Пример ERB (app/views/items/index.html.erb):

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

Если вместо этого вы намерены отобразить каждую книгу со связанными предметами под каждой книгой, вам лучше использовать действие index на BooksController. Найдите все книги, переберите каждую книгу, и для каждой книги переберите элементы этой книги.

1 голос
/ 24 декабря 2009

Массив предметов не имеет книги, каждый предмет имеет. Похоже, вы пытаетесь получить книгу ВСЕХ предметов, которых не существует.

Попробуйте @items[0].book или используйте цикл в вашем представлении:

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

Вы также можете использовать частичное для перебора массива. См. Раздел «Рендеринг коллекции партиалов» по ​​адресу http://api.rubyonrails.org/classes/ActionView/Partials.html

0 голосов
/ 24 декабря 2009

Проблема в том, что вы вызываете items.book для массива элементов, и у массива нет метода с именем book (отсюда и ошибка). Вам нужно получить одну книгу из этого массива (например, items[0]), а затем вызвать .book для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...