J'ai un modèle d'événements qui a deux champs nommés:Puis-je attacher une portée nommée à un lien dans Rails?
class Event < ActiveRecord::Base
scope :future, lambda { where('events.date >= ?', Time.zone.now) }
scope :past, lambda { where('events.date <= ?', Time.zone.now) }
end
J'appelle ces champs d'application de mon contrôleur en créant deux nouvelles actions de contrôleur (appelé « futurs » et « passé »):
Mon contrôleur :
class EventsController < InheritedResources::Base
actions :index, :show, :future, :past
has_scope :future
has_scope :past
def future
index! { @events = Event.future }
end
def past
index! { @events = Event.past }
end
end
J'ai également des vues et des routes pour ces actions supplémentaires.
Cela fonctionne très bien. Ma demande fait ce que je veux et je peux créer un lien vers les nouvelles actions dans ma barre latérale comme suit:
%li
= link_to 'Events Home', events_path
%li
= link_to 'Future Events', future_events_path
%li
= link_to 'Past Events' past_events_path
Maintenant, mon problème avec cette configuration est que, si cela fonctionne très bien, je n'aime pas le fait que Je dois créer de nouvelles actions, vues et routes pour ces étendues supplémentaires. Je ne pense pas que je fais ça de la bonne façon. Essentiellement, j'essaie de filtrer les résultats sur la page d'index, mais je dois créer de nouvelles actions, routes et vues pour le faire. Cela semble un peu lourd et je me demande s'il y a un autre moyen.
Ce serait bien si je pouvais en finir avec les actions de « futur » et contrôleur « passé » et il suffit d'appeler les champs d'application de la vue comme ceci:
%li
= link_to 'Events Home', events_path
%li
= link_to 'Future Events', events_path.future
%li
= link_to 'Past Events' events_path.past
Il est évident que cela ne fonctionne pas. Je l'ai vu an example qui utilise une aide de select_tag personnalisée mais je peux tout à fait modifier pour travailler sans balise select ou JS ...
Est-il préférable de coller avec la méthode actuelle
merci beaucoup, cela fonctionne parfaitement - ça aide vraiment! – stephenmurdoch
Pouvez-vous toujours le faire en utilisant les rails 4 ou 5 dans l'action d'index? –