Question

Je travaille sur une application Rails 3, et j'ai une ligne dans l'un de mes contrôleurs qui ressemble comme suit:

@features = Feature.find(:all, :conditions => ['featured_at < ?', Time.current], :order => 'featured_at ASC')
@feature = @features.find(params[:feature])

L'idée est de saisir un ensemble de "fonctionnalités" de la base de données, sous réserve de certaines contraintes, puis de choisir une en particulier de cet ensemble. Si le dossier en question existe dans la base de données mais ne correspond pas aux contraintes, je ne veux pas la retourner. Ainsi je fais @features.find plutôt que Feature.find.

Le problème que j'ai, c'est que la vue a besoin @feature.title, qui génère une erreur:

undefined method 'title' for #<Enumerator:0x0000010216efd8>

Bien sûr, je peux contourner le problème en remplaçant ce qui précède par cela, où je définis simplement les contraintes deux fois:

@features = Feature.find(:all, :conditions => ['featured_at < ?', Time.current], :order => 'featured_at ASC')
@feature = Feature.find(params[:feature], :conditions => ['featured_at < ?', Time.current], :order => 'featured_at ASC')

Mais cela semble inélégant et un peu redondant.

Quelle est la meilleure solution? Comment puis-je obtenir mon @features.find résultat traité comme le Feature c'est, plutôt qu'un Enumerator qui n'a pas les variables / méthodes dont j'ai besoin pour accéder dans la vue?

Merci pour toute réflexion à ce sujet.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top