0

Mon but ici est d'imprimer la liste des utilisateurs de la ville et la catégorie spécifiées avec leurs noms, adresse et nom de club.Nom et adresse s'affichent correctement mais quand j'ajoute le nom du club, dit undefined method memberships for #<Enumerator:0xa5509b0> .Je sais c'est parce que Club est dans un modèle différent, donc la question est comment puis-je accéder au nom du club? Je suis vraiment peu profonde dans le complexe has_many realtionships.Can quiconque fait des corrections nécessaires s'il vous plaît, c'est comment loin j'ai.Merci à l'avancehas_many associations table confus

MODÈLES

class User < ActiveRecord::Base 
    has_many :memberships 
    has_many : clubs,:through =>:memberships 
    belongs_to :category 
    belongs_to :city 
end 

class Club < ActiveRecord::Base 
    has_many :users 
    has_many :memberships 
    has_many : users ,:through =>:memberships 
    belongs_to :city 
end 

class Membership < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :club 
end 

class City < ActiveRecord::Base 
    has_many :clubs 
    has_many :users 
end 

class Category < ActiveRecord::Base 
    has_many :users 
end 

CONTRÔLEUR

@users=User.where("category_id =? AND city_id=?",Category.find(2),session[:city_id]) 
    @[email protected] 
    @[email protected] #this gives undefined method membership 

VIEW

<% @user.each do |user| %> 
    <%= user.username %> 
    <%= user.address %> 
    <%= @club.name %> #attribute name is in the club model not membership 
    <%end%> 

ROUTE

 devise_for :users 
     resources :city,:club,:category 

Répondre

1

La ligne ci-dessous retourne un tableau au lieu de ce que vous attendez, à savoir l'objet utilisateur. Si les utilisateurs affichés dans la vue appartiennent à des clubs différents, vous devez y accéder directement dans la vue. Vous pouvez charger les clubs si nécessaire.

Dans votre contrôleur

@users=User.where(:category_id => Category.find(2), :city_id=>session[:city_id]). 
    include(:clubs) 

À votre avis

<% @users.each do |user| %> 
    <%= user.username %> 
    <%= user.address %> 
    <% user.clubs.each do |club| %> 
    <%= club.name %> 
    <%end%> 
<%end%> 
+0

Je viens de me rendre compte que vous avez créé ce joyau vote_fu, j'avais quelques questions pour vous, j'utilise cette gemme dans mon application. – katie

+0

@katie: Postez votre requête comme une question régulière de SO. –

+0

j'ai posté il y a quelques jours, mais personne n'a répondu, il semble que peu de gens l'aient utilisé – katie

0

Tout d'abord, vous avez une erreur dans la classe Club. Vous ne pouvez pas avoir 2 relations avec le même nom. Le second sera prioritaire en premier.

has_many : users ,:through =>:memberships 

devrait être

has_many :members, :through =>:memberships, :foreign_key => 'user_id' 

La recherche devrait être:

@users = User.where(:category_id => 2, :city_id => 3).include(:clubs) 

ou quoi que ce les valeurs que vous souhaitez rechercher by.The est vue:

<% @user.each do |user| %> 
    <%= user.username %> 
    <%= user.address %> 
    <%= user.club.name %> #attribute name is in the club model not membership 
<%end%> 

Votre les routes sont bien.

Questions connexes