2010-07-09 16 views
0

J'ai un contrôleur qui cherche un ensemble de contacts à partir de la table de contacts. il semble actuellement comme ceci:Comment filtrer ou trouver un modèle basé sur une méthode dans ce modèle?

@contacts = @campaign.contacts.find(:all, :order => "date_entered ASC") 

La méthode dans le contact.rb (Model) est la suivante:

def status 
    return if statuses.empty? 
    a= statuses.find(:last).status << ' (' << statuses.find(:last).created_at.to_s(:long) << ')' 
    return a 
end 

Pour la plupart, s'il y a une valeur dans le « statut », je ne plus vouloir l'afficher dans la vue.

À l'heure actuelle, l'état est polymorphe. Cela pourrait avoir été une idée stupide, mais je voulais le concept de statut à appliquer à différents modèles:

class Status < ActiveRecord::Base 
    attr_accessible :statusable_id, :statusable_type, :status 

    belongs_to :statusable, :polymorphic => true 

end 

# == Schema Information 
# 
# Table name: statuses 
# 
# id    :integer   not null, primary key 
# statusable_id :integer 
# statusable_type :string(255) 
# status   :string(255) 
# created_at  :datetime 
# updated_at  :datetime 
# 

Je suppose que si je peux ajouter cette condition à l'instance de @contacts, qui prendrait en charge il. Mais je ne sais pas comment écrire cette condition dans le contrôleur sur la méthode .find (si c'est la bonne façon de le faire).

merci.

Répondre

2

Je suppose que contact has_many statuses. Je ne suis pas sûr du reste de l'application, mais du code que vous avez donné ci-dessus, il semble que vous êtes intéressé uniquement par le dernier statut, et donc vous feriez mieux de créer un statut et un attribut à la place d'une association has_many.
Cependant, en supposant que pour une autre exigence vous avez besoin de l'association has_many, dans ce cas, ce que vous avez fait semble raisonnable.

+0

Salut, mais qu'est-ce que je fais en tant que condition? Je ne suis pas sûr que je resterai has_many ... Je * pense * cela me permettra de tracer tous les changements que le statut change ... mais pas sûr. Je pensais aussi à rendre plusieurs modèles tous statutables via polymorphique ... plutôt que d'avoir un attribut séparé. Mais ce serait beaucoup plus simple si je le faisais. – Angela

0

Pour développer la réponse de NM, pourquoi ne pas créer une relation has_one latest_status, puis utiliser l'option: join? Il est documenté dans la page Active Record Base au http://api.rubyonrails.org/classes/ActiveRecord/Base.html, il suffit de rechercher: jointures.

Si vous effectuez une recherche dans la table jointe, et que vous avez déjà défini la relation comme étant le dernier état, vous obtiendrez ce que vous voulez, n'est-ce pas?

+0

Salut je n'ai toujours pas la condition .... est-ce que j'utiliserais le statut est? NUL? blanc? – Angela

+0

Voici l'erreur que je reçois: SQLite3 :: SQLException: aucune colonne de ce type: status.id – Angela

+0

Je n'ai pas les documents SQLite3 en face de moi, mais je crois que la clause where pour correspondre à une valeur nulle serait "WHERE status.field EST NULL ". Est-ce ce que vous demandez? – jasonpgignac