2010-07-11 4 views
0

J'ai créé une application rails simple qui a un modèle de personnes et de notes.Rails de trouver des notes par date

Les gens ont beaucoup de notes et les notes appartiennent aux personnes

Les travaux d'application et je suis en mesure de montrer toutes les notes pour une personne, mais je voudrais être en mesure de montrer une seule note pour une date spécifique.

Le scénario par défaut étant la date d'aujourd'hui.

J'ai actuellement les suivantes:

<% @person.notes.each do |note| %> 
    <p> 
    <h3><%=h note.title %></h3> 
    </p> 

    <p><b>Body: </b><br /> 
    <%=h note.body %> 

J'ai essayé plusieurs méthodes différentes mais ne peut pas obtenir de me montrer une note pour la date d'aujourd'hui.

J'ai essayé de créer un champ nommé et a échoué avec cela et essayé aussi d'utiliser:

@person.notes.find_by_created_at(Time.now-1.day) 

Quelqu'un peut-il me diriger dans la bonne direction s'il vous plaît?

Merci

Tom

#

J'ai utilisé le code en bas et est venu avec cela.

Ma vue de spectacle ressemble à ceci.

<p> 
    <h1><%=h @person.name %></h1> 
</p> 

<h2>Notes</h2> 

<% @person.notes.all(:conditions=> ["created_at >= ? ", Time.now.beginning_of_day]) do |note| %> 
    <p> 
    <h3><%=h note.title %></h3> 
    </p> 

    <p><b>Body: </b><br /> 
    <%=h note.body %> 
    </p> 

<% end %> 

Je pense que je peux être en utilisant la mauvaise syntaxe à mon avis, ou ne devrait peut-être même à l'aide des dans la vue?

T

Répondre

1

Sur la base de votre question mise à jour, vous devez itérer sur les éléments qui sont renvoyés de votre requête.

<% @person.notes.all(:conditions=> ["created_at >= ? ", Time.now.beginning_of_day]).each do |note| %> 

Rappelez-vous, cette requête appartient vraiment dans un modèle quelque part et appelé à partir d'un contrôleur;)

Edit: Comme je ne me sens pas vraiment comme je l'ai répondu à votre question initiale, je vais ajouter à ma réponse un peu.

Vous pouvez certainement placer cette requête dans votre modèle Note en tant que portée nommée.Quelque chose le long des lignes de:

named_scope :today, lambda { |date| { :conditions => ["created_at >= ? ", Time.now.beginning_of_day] } } 

ci-dessus n'a pas été testé car je ne me rappelle pas la syntaxe exacte , mais vous aurez besoin d'utiliser un lambda ou bien lorsque votre application rails commence pour la première temps, il insérera ici la date du jour et ne sera jamais mis à jour lorsque des requêtes ultérieures seront faites à named_scope. Il y a plus d'informations sur la situation ci-dessus dans this railscast.

Dans votre PeopleController, vous pouvez les récupérer en tant que @todays_notes = @person.notes.today, puis les parcourir à votre vue avec @todays_notes.each do |note|.

+0

Merci. Ça a marché. –

2

Pour obtenir tous les dossiers pour une date donnée:

@person.notes.all(:conditions=> ["created_at BETWEEN ? AND ? ", 
    date.beginning_of_day, date.end_of_day]) 

Pour obtenir le premier enregistrement à une date donnée:

@person.notes.first(:conditions=> ["created_at BETWEEN ? AND ? ", 
    date.beginning_of_day, date.end_of_day], :order => :created_at) 

Pour obtenir tous les dossiers pour aujourd'hui (en supposant que created_at est toujours inférieur à l'heure actuelle):

@person.notes.all(:conditions=> ["created_at >= ? ", 
    Time.now.beginning_of_day]) 

Pour obtenir le premier enregistrement d'aujourd'hui (en supposant created_at est toujours inférieure à l'heure actuelle):

@person.notes.first(:conditions=> ["created_at >= ? ", 
    Time.now.beginning_of_day], :order => :created_at) 
+0

Merci pour votre réponse. Votre syntaxe fonctionne parfaitement et produit la bonne instruction SQL (je l'ai exécutée via mysql pour vérifier) ​​mais pour une raison quelconque, mon application refuse d'afficher les notes. Ma vue de spectacle ressemble à ceci. ## J'ai ajouté le code au message original ## Je pense que je fais quelque chose de mal à mon avis ... –

+0

Avez-vous vérifié pour vous assurer que vous avez des données pour la personne? Essayez d'exécuter la commande dans 'script \ console' pour voir s'il y a des données. –

Questions connexes