2011-07-22 3 views
0

J'ai 2 modèles:vraiment facile Rails actif Enregistrez associations QUESTION

class Mission < ActiveRecord::Base 
    belongs_to :category 
end 

class Category < ActiveRecord::Base 
    has_many :missions 
end 

et moi avons une déclaration complexe find Mission:

@missions = Mission.send(@view, level).send(@show).search(@search).paginate :page => params[:page], :order => actual_sort, :per_page => 50 

Je voudrais ajouter à ma question la possibilité pour rechercher une catégorie spécifique aussi. J'ai essayé cela, mais il ne fonctionne pas:

@missions = Mission.send(@view, level).send(@show).send(:category, @category).search(@search).paginate :page => params[:page], :order => actual_sort, :per_page => 50 

Rails dit que la mission n'a pas une méthode .category. Comment résoudriez-vous cela?

Merci, Augusto

Répondre

0

OH ... MON DIEU ...

Êtes-vous sûr que ce soit la meilleure façon de faire cela?

Je ne pense pas que les gens seront en mesure de vous aider si vous n'expliquez pas un peu plus, mais je doute fortement que vous ne pouviez pas écrire votre déclaration comme ceci:

@missions = Mission.select("missions.level ...,category.attr ...").where(["missions.level = ? ...", level ...]).includes(:category).where(["categories.field = ?", ...]).paginate(...) 

Il est évident que la elipses (...) signifient généralement etc.

Ceci est un exemple de travail sur l'un de mes projets dans les tests:

i = Item.where("items.name like '%Coupon%'").includes(:category).where(["categories.name = ? ",'Category 2']) 
+0

Merci! Votre indice m'a aidé à trouver la solution: – Augusto

+0

named_scope: category, lambda {| category | {: conditions => ["categories.name =?", catégorie]} if category! = ""} – Augusto

0

Essayez d'effectuer la sélection sur laquelle category_id