Je souhaite que l'utilisateur actuel lise et achète des articles dans les clubs dont il est membre. J'aimerais faire quelque chose comme ce qui suit, mais rien que j'ai lu ou essayé n'a encore cliqué. Je vais utiliser de nombreuses collections de nidification de ce type, je suis coincé!
modèlesCollections utilisant has_many,: relations
class User < ActiveRecord::Base
has_many :memberships
has_many :clubs, :through => :memberships
has_many :products
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :club
class Club < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
has_many :events
class Event < ActiveRecord::Base
belongs_to :club
class Product < ActiveRecord::Base
belongs_to :user
has_many :posts
class Post < ActiveRecord::Base
belongs_to :product
belongs_to :event
Messages Contrôleur
def index
@user = current_user
@posts_in_my_clubs = @user.memberships.collect { |a| a.products.posts}
messages/index.html.erb
@posts_in_my_clubs do |post|
me donne l'erreur:
undefined method `memberships' for nil:NilClass
À qui je ne suis pas surpris. En outre, je veux être en mesure de sélectionner uniquement les messages qui seront seulement à un certain événement, etc
Un résumé des modèles: Clubs ont de nombreux événements & Utilisateurs. Les utilisateurs ont de nombreux produits auxquels ils peuvent poster une quantité à vendre à différentes dates de l'événement. Seuls les utilisateurs membres d'un club peuvent afficher ou afficher des posts dans un club. Au lieu de répéter les données dans les modèles, j'ai créé des associations qui semblent rendre les données inaccessibles à la création de collections dans ActiveRecord. J'ai trouvé dans ma recherche Association Join Models, et Intelligent association mapping avec metawhere. Ces liens me donnent l'impression de me rapprocher.
Modifier
Je suis connecté et peut accéder à toutes les données dont j'ai besoin aussi longtemps que je ne suis pas essayer de faire une collection comme ça. Par exemple, je peux vérifier si je suis membre du club par
def member?(club)
return !!self.clubs.find(club)
Je suis un noob, donc je dois manquer ici quelque chose d'évident. Dois-je diviser ma collection en plusieurs étapes? à savoir recueillir des clubs d'utilisateurs, recueillir les produits des clubs d'utilisateurs, recueillir les messages produits clubs utilisateur ... grâce
Logger.INFO
@user = current_user
logger.info @user
logger.info 'super secret message'
# @club_posts = @user.memberships.collect {|a| a.product.posts}
retours
#<User:0x5b202a0>
super secret message
Quand je supprimer le commentaire, je reçois la Encore une fois, pour 'produit' (progression!). Je pensais que j'étais connecté avant ... il était tard
D'abord résoudre le problème avec l'erreur "NilClass", parce que vous n'avez évidemment pas Utilisateur retourné par 'current_user'. Votre contrôleur authentifie-t-il correctement l'utilisateur dans before_fitler? Si vous avez besoin d'un utilisateur, vérifiez-vous si vous avez un utilisateur authentifié dans cette action? – MBO
Lisez à nouveau mon commentaire - votre variable '@ user' contient zéro. Il n'y a pas de problème avec vos collections. C'est un problème avec votre code d'authentification. Mettez 'logger.info @ user' dans l'index après avoir assigné' @user = current_user'. S'il sort 'nil', alors vous n'avez pas d'enregistrement utilisateur dans la variable' @ user', donc ce n'est pas encore un problème avec les collections et les relations. – MBO
Merci, la journalisation aidera à déboguer. – thejonster