0

Je suis nouveau sur les rails et je travaille sur mon premier petit projetHas_Many_Through & Active_Record_Collection_Proxy erreur

J'ai 3 modèles dans mon application Rails:

restaurant < - (modèle maître)

Menu < - (se rapporte directement au restaurant, le restaurant ne peut avoir qu'un menu)

Articles < - (se rapporte directement au menu, menu a de nombreux articles)

J'ai des difficultés à mettre en place des associations & je n'arrive pas à faire les choses correctement. Mes modèles sont les suivants:

class Restaurant < ApplicationRecord 
    has_one :menu 
    has_many :items, through: :menus 

class Menu < ApplicationRecord 
    belongs_to :restaurant 
    has_many :items 


class Item < ApplicationRecord 
    belongs_to :menu 

Lorsque je tente de rendre une vue partielle sur la page en appelant les classes I get "

méthode non définie des éléments pour # Menu :: ActiveRecord_Associations_CollectionProxy : 0x3a74d08>

Ce que je fais par:

 <%= render @menus%> 
     <%= render @items %> 

J'ai réussi à afficher partiellement le MENU, mais l'affichage des éléments renvoie l'erreur de méthode non définie.

Voici mon contrôleur de restaurant:

def show 
    @menus = Menu.where(:restaurant_id => @restaurant.id) 
    @items = Item.where(:menu_id => @menus.id) 
    end 

J'ai passé beaucoup de temps à essayer d'ajuster les associations sans chance. Je vous remercie.

+0

pourrait être dans votre instruction if. Vous appelez '@ menus' mais vous ne voulez appeler qu'un seul '@ menu' pour obtenir les éléments de ce menu spécifique. Si vous avez plusieurs 'menus', alors vous devriez faire une boucle sur ceux-ci et ensuite appeler' .items' pour chaque instance de 'menu'. Dans ce scénario, vos 'render @ items' devraient probablement être' render @ menu.items' parce que de ce fait, il ne semble pas que '@ items' soit défini. – user3366016

+0

Afficher où vous déclarez @menus –

+0

Restaurant Controller = def show @menus = Menu.where (: restaurant_id => @ restaurant.id) fin –

Répondre

0

Essayez: menu au lieu de: menus

class Restaurant < ApplicationRecord 
    has_one :menu 
    has_many :items, through: :menu