2010-09-04 5 views
1

J'ai une application rails qui affiche des statistiques basées sur la production quotidienne d'un employé. Actuellement, ma page affiche TOUS les enregistrements.Comment modifier les enregistrements affichés sur la page avec des boutons sur la page (RoR)

Je sais comment montrer diverses combinaisons différentes telles que des enregistrements faits entre deux dates etc ... mais ce que je voudrais vraiment faire est de faire en sorte qu'une seule page (disons la page d'index) ait 3 contrôles qui permettent il permet de basculer entre les enregistrements statistiques quotidiens, les enregistrements statistiques hebdomadaires et une contrainte de date personnalisée des enregistrements statistiques (par exemple, de la date xx/xx/2009 à la date xx/xx/2010). J'ai cherché pendant un certain temps à essayer de comprendre cela, mais il me manque évidemment quelque chose car je ne trouve personne d'autre qui a rencontré les mêmes problèmes.

Si cela est trop difficile à faire de cette façon, l'autre - la plupart du temps facile, je peux voir pour ce faire est de créer une page pour chaque vue, mais il reste encore une question sur comment configurer le contrôle pour choisir les contraintes de date personnalisées. J'applique à l'avance pour ma nouveauté mais si quelqu'un pouvait m'expliquer cela, je pense que cela va vraiment augmenter ma compréhension des rails. Merci d'avance

Répondre

0

Votre contrôle peut facilement ajouter des informations à la chaîne de requête. Comme ce formulaire fait:

<form action="" method="get"> 
    <fieldset> 
    <button type="submit" name="show" value="daily">Daily stats</button> 
    <button type="submit" name="show" value="weekly">Weekly stats</button> 
    </fieldset> 
    <fieldset> 
    From <input type="text" name="interval-start" value="" /> till 
    <input type="text" name="interval-end" value="" /> 
    <button type="submit" name="show" value="interval">Stats for the specified interval</button> 
    </fieldset> 
</form> 

Lorsque l'utilisateur clique sur un bouton, le navigateur envoie tous les champs de formulaire au serveur. Côté serveur, dans votre action, vous pouvez rechercher la propriété show de la baie params. Comme ceci:

@reports = case params["show"] 
    when "daily" 
     #Just an example. Use ActiveRecord's query interface or Arel in Rails 3, not plain queries 
     Report.find_by_sql "SELECT * FROM reports WHERE DATE(report_date) = DATE(NOW())" 
    when "weekly" 
     Report.find_by_sql "SELECT * FROM reports WHERE WEEK(report_date) = WEEK(NOW())" 
    when "interval" 
     Report.find_by_sql "..." 
    else 
     #Some other possible values, filters, so on 
end 

Et dans votre point de vue juste sortie la variable @report comme d'habitude.


Vous pouvez aussi créer une nouvelle route pour que le filtrage, peut-être /reports/:name et évitez d'utiliser des formes. Dans ce cas, vous créez uniquement des liens pointant vers le bon filtre (/reports/daily, /reports/weekly, etc.). Sur le côté serveur, vous devez vérifier reports[:name] pour la valeur appropriée.

+0

wow, merci pour cela! Je vais l'implémenter et vous faire savoir comment ça se passe! –

+0

OK, testé et testé. C'est exactement ce que j'étais après. Merci beaucoup! –

+0

donc une dernière question à ce sujet, je l'ai mis dans mon application mais j'ai du mal à faire fonctionner les champs de date personnalisés (intervalle-début et intervalle-fin). Pourriez-vous suggérer comment je ferais cela? –

Questions connexes