1
votes

Comment créer une portée pour une relation has_many dans rails 5?

J'ai un modèle de Groupe qui comporte de nombreux événements , et j'essaie de trouver les groupes qui ont des événements publics uniquement via quelque chose comme Group.public_events

Voici mon groupe:

class Event < ApplicationRecord
  belongs_to :group
end

Et voici mon événement:

class Group < ApplicationRecord
  has_many :events, dependent: :destroy
end

Je voudrais pour créer un scope: public_events pour trouver .where (private: false) sur l'événement, mais cela doit-il aller sur le groupe ou l'événement?


0 commentaires

3 Réponses :


3
votes

vous pouvez mettre Event.rb

@public_events = Group.first.events.public_events

et vous pouvez l'appeler

class Event < ApplicationRecord
  belongs_to :group
  scope :public_events, lambda { where('private = ?',false)}
end


2 commentaires

Si je fais cela, j'obtiens une erreur de méthode non définie. Qu'est-ce que je fais mal? Merci


ah désolé j'ai oublié de mentionner .events, je viens de corriger ci-dessus @public_events = Group.first.events.public_events



3
votes

Participera à l'événement comme ceci.

class Event < ApplicationRecord
  belongs_to :group
  scope :public_events, -> { where(private: false) }
end


3 commentaires

L'appelez-vous Group.first.public_events? Parce que j'obtiens un noMethodError. Merci


Vous pouvez l'appeler Group.public_events


appelez-le Group.public_events



1
votes

Vous pouvez utiliser cette option.

scope :public_events, ->(parameter_if_any) {
  where({ private: parameter_if_any||false } )
}


0 commentaires