8
votes

RUBY ON RAILS: Niché des cordes nommées

Y a-t-il un moyen de nier les étanches nommées à l'intérieur de différents modèles?

Exemple: P>

class Company
  has_many :employees
  named_scope :with_employees, :include => :employees
end
class Employee
  belongs_to :company
  belongs_to :spouse
  named_scope :with_spouse, :include => :spouse
end
class Spouse
  has_one :employee
end


1 commentaires

De ce que je connais Rails3 Finders M.Onkey.org/2010/ 1/22 / Active-Record-Query-Interface s'est amélioré dans la zone de chaînage du filtre.


3 Réponses :


0
votes

Vous avez besoin de définir tout le temps de toutes vos conditions. Mais vous pouvez définir une méthode pour combiner certaines nommées_SPOPE

class Company
  has_many :employees
  named_scope :with_employees, :include => :employees
  named_scope :limit, :lambda{|l| :limit => l }

  def with_employees_with_spouse
    with_employees.with_spouse
  end

  def with_employees_with_spouse_and_limit_by(limit)
    with_employees_with_spouse.limit(limit)
  end

end
class Employee
  belongs_to :company
  belongs_to :spouse
  named_scope :with_spouse, :include => :spouse
end
class Spouse
  has_one :employee
end


2 commentaires

Dans votre méthode_employe_with_spouse, vous êtes enchaîné avec_employés avec le sous-model avec Suboudel With_Spouse. Était-ce voulu, car c'est ce que je cherche un moyen de faire.


oui mon exemple n'est pas vraiment génial mais il n'y a pas vraiment bon moyen de faire :(



1
votes

Vous pouvez utiliser le scoping par défaut

Company.find(1)          # includes => [:employee => :spouse]


2 commentaires

Je recommanderais de rester loin default_scope. C'est difficile à faire face lorsque vous en avez besoin et cela augmente plus souvent que vous ne le pensez.


Je affinerais cela pour n'utiliser que par défaut_scope pour la commande et ne jamais l'utiliser pour affiner ou limiter les enregistrements à une requête.



0
votes

Essayez ceci xxx


0 commentaires