2016-04-28 17 views
0

<% @notes.each do |note| %>@challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %>に組み込むと、チャレンジ/ショーの条件が機能するようになりますか?2つのオブジェクトの反復を組み合わせるにはどうすればよいですか?

今、ノート/フォームがノート数ごとに複数回レンダリングされているためです。

挑戦/ショー

<% @challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %> 
    <% @notes.each do |note| %> # How to incorporate this iteration into above iteration? 
    Day <%= i + 1 %> 
    <% if note.notes_date.strftime("%m/%d/%y") == date.strftime("%m/%d/%y") %> # If note is created on date then show note else show form 
     <%= note.notes_text %> 
    <% else %> 
     <%= render 'notes/form', :date => date %> 
    <% end %> 
    <% end %> 
<% end %> 

2回の繰り返しの代わりに2を組み合わせるのがあるのでこれはあります。私は2つを組み合わせる方法を知らないので、反復が動作し、dateにノートが作成されている場合は<%= note.notes_text %>を表示し、それ以外の場合はノート/フォームを表示します。

+0

あなたのノートモデルはあなたの日付にどのように関連付けられていますか? 2つのフォーマットされた日付を比較する理由は明らかではありません。日付と日付を比較するだけで十分です。 – tadman

+0

'notes_date'は' Note'の属性なので 'notes_date'を' date'と比較しますが、 'date'は' Challenge' @tadmanの 'days_challenged'の属性から派生しています。私は、ユーザーのチャレンジの日ごとにノートやノート/フォームを表示したいと思います。その日にメモが作成された場合は、メモ/フォームが表示されるはずです。 –

答えて

2

Rubyで2つの異なるデータ構造を整列しようとすると、多くのツールが自由に使えます。より便利なものの1つは、辞書をハッシュに変換することができます。ハッシュは、任意の属性で素早く検索することができます。例えば

<%- notes_for_date = @notes.group_by(&:note_date) -%> 

次に、あなたは、任意の日付にメモを表示することができます:あなたは少しあいまいであるように見える

<%- if notes_for_date[date].any? %> 
    <%- notes_for_date[date].each do |note| -%> 
    <%= note.notes_text %> 
    <%- end -%> 
<% else %> 
    <%= render 'notes/form', :date => date %> 
<% end %> 

ことの一つは、@notesのようなコレクションが配列またはであるということですnote_textのような呼び出しメソッドを直接使用することはできません。

あなたはこれを行うことができ、これらのすべての値を取得したい場合:

ノートのすべてを引き出すと、単一の文字列にそれらを組み合わせた効果を持つ
note_texts = @notes.collect(&:note_text).join 

Rubyで学習する際にまずマスターしようとすることは、必要なフォームにデータを変換する方法や、最終的に必要な方法に近いフォームを理解して段階的に取り組むことです。 Enumerableライブラリは非常に便利なツールでいっぱいです。私はあなたが自由な時間に利用可能なツールの幅と深さの感覚を得なければならないことを見てみることをお勧めします。

+0

ありがとうTadman!私はあなたの答えで遊んできましたが、どこから '[日付]'を得るのですか?私は '<%@ challenge.dates_challenged.first(@ challenge.days_challenged).each_with_index do | date、i | %> 'で' '未定義のメソッド '? nil:NilClass' –

+0

あなたは 'notes_for_date.each | date、notes |'を使って日付を繰り返し処理できます。 – tadman

+0

'<%@ notes_for_date.each do |日付、注意事項| %> <%if @notes_for_date [date] .any? %> <%@notes_for_date [date] .each do | note | %> <%= note。<%= 'ノート/フォーム' をレンダリングし、> <% end %> <% else %> %notes_text:日付=>日付のでそのような%> <% end %> <% end %> '?そして、 '@notes_for_date = @ notes.group_by(&:notes_date)'をコントローラに入れます。 1つの音符だけが存在すれば、すべてのフォームが消えます –

関連する問題