2009-12-24 6 views
1

Je suis un débutant dans les rails, et j'ai cherché partout une réponse à ce problème. Voici ce que j'ai:Rails Mise en route Question

class Item < ActiveRecord::Base 
    belongs_to :book 

class Book < ActiveRecord::Base 
    has_many :items 

Maintenant, je veux lister tous les éléments avec leurs propriétés et le livre qui leur est associé. Ils allaient sous index dans la items_controller.rb

class ItemsController < ApplicationController 
    # GET /items 
    # GET /items.xml 
    def index 
    @items = Item.all 

maintenant comment pourrais-je manipuler des livres dans le ItemsController afin que je puisse les énumérer dans la tenue index.html.erb à l'esprit qu'un élément appartient à un seul livre? si j'ajoute:

@books = items.book.find 

droite sous @items = Item.all donc je peux les référencer dans le index.html.erb je reçois:

méthode non définie 'livre' pour # <Array:0x10427f998>

J'ai le sentiment que la réponse est si simple mais jusqu'à présent, je ne l'ai pas compris. Y a-t-il un tutoriel que vous connaissez, qui couvre ce sujet?

Merci!

Répondre

5

À votre avis, lorsque vous parcourez tous vos @items, il vous suffit de référencer le livre pour chacun d'entre eux. Exemple ERB (app/views/items/index.html.erb):

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

Si au lieu de votre intention est d'afficher chaque livre avec les éléments associés sous chaque livre, vous seriez mieux d'utiliser l'action index sur le BooksController. Trouvez tous les livres, parcourez chaque livre, et pour chaque livre, passez en revue les éléments de ce livre.

+0

Merci pour la réponse. J'ai également eu quelques mauvaises données qui causent certains des problèmes, mais ceci fonctionne totalement. Je vous remercie! –

1

Le tableau d'éléments n'a pas de livre, chaque élément individuel le fait. Il semble que vous essayez d'obtenir le livre de tous les éléments, ce qui n'existe pas.

Essayez @items[0].book ou en utilisant une boucle dans votre vue:

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

Vous pouvez également utiliser une partie pour itérer à travers le réseau. Reportez-vous à la section "Rendu d'une collection de partiels" au http://api.rubyonrails.org/classes/ActionView/Partials.html

0

Le problème est que vous appelez items.book sur un tableau d'éléments, et le tableau n'a pas une méthode nommée book (d'où l'erreur). Vous devez obtenir un seul livre de ce tableau (tel que items[0]), puis appelez le .book à ce sujet.