2012-03-16 12 views
1

私のアプリにはいくつかのプロジェクト/タスクスケジューリング機能があります。私はIce_cubeの宝石を使ったシンプルなデモを最初に作ったし、定期的なイベントのスケジューリングにはうまくいきます...しかし、私は個々の曜日のスコープ/アクションを心配しています。だから、私は7つのブールチェックボックスでスケジュールフォームを作成しました。Rails - Weekly Schedule with Day Checkbox

例>weekday eventsのこの記事を参照してください。解決策を得ることができませんでしたが、私の要件は少し異なります。

代わりに、私は動作するいくつかのコードを書いた---しかし非常にclunky /醜い。私は、私ができるメソッドを書く方法に関するアイデアを探しています:ユーザが選択した日付範囲の各曜日のカレンダー日付を割り当てます。

Indexビュー:

<h1>Weekly Project Schedule</h1> 
<br /> 

<h2>Monday: <%= Date.today.monday %></h2> 
<% @tasks.each do |task| %> 
    <% if task.monday? %> 
     <h3><%= link_to task.name, task %></h3> 
     <p>Starts: <%= task.starts_on %></p> 
     <p>Ends: <%= task.ends_on %></p> 
     <p><%= link_to 'Edit', edit_task_path(task) %></p>  
    <% end %> 

<% end %> 

<h2>Tuesday: <%= Date.today.monday+1 %></h2> 
<% @tasks.each do |task| %> 
    <% if task.tuesday? %> 
     <h3><%= link_to task.name, task %></h3> 
     <p>Starts: <%= task.starts_on %></p> 
     <p>Ends: <%= task.ends_on %></p> 
     <p><%= link_to 'Edit', edit_task_path(task) %></p>  
    <% end %> 

<% end %> 

<h2>Wednesday: <%= Date.today.monday+2 %></h2> 
<% @tasks.each do |task| %> 
    <% if task.wednesday? %> 
     <h3><%= link_to task.name, task %></h3> 
     <p>Starts: <%= task.starts_on %></p> 
     <p>Ends: <%= task.ends_on %></p> 
     <p><%= link_to 'Edit', edit_task_path(task) %></p>  
    <% end %> 

<% end %> 

<h2>Thursday: <%= Date.today.monday+3 %></h2> 
<% @tasks.each do |task| %> 
    <% if task.thursday? %> 
     <h3><%= link_to task.name, task %></h3> 
     <p>Starts: <%= task.starts_on %></p> 
     <p>Ends: <%= task.ends_on %></p> 
     <p><%= link_to 'Edit', edit_task_path(task) %></p>  
    <% end %> 

<% end %> 


Schema: 
    ActiveRecord::Schema.define(:version => 20120315004635) do 
     create_table "tasks", :force => true do |t| 
    t.string "name" 
    t.date  "starts_on" 
    t.date  "ends_on" 
    t.boolean "monday" 
    t.boolean "tuesday" 
    t.boolean "wednesday" 
    t.boolean "thursday" 
    t.boolean "friday" 
    t.boolean "saturday" 
    t.boolean "sunday" 
    t.boolean "completed" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

モデル - 無添加のコード。

大変助かりました!

答えて

3

あなたが

<%- %w(sunday monday tuesday wednesday thursday friday saturday).each |day| %> 
    <h2><%= day.titleize %>: <%= Date.today.send(day) %></h2> 
    <% @tasks.each do |task| %> 
    <% if task.send("#{day}?") %> 
     <h3><%= link_to task.name, task %></h3> 
     <p>Starts: <%= task.starts_on %></p> 
     <p>Ends: <%= task.ends_on %></p> 
     <p><%= link_to 'Edit', edit_task_path(task) %></p>  
    <% end %> 

    <% end %> 
<% end %> 

そしてそう

+0

+1プラス配列にwの%を移動し、E。..定数などのモデルでは平日と上のビューで例えばメタプログラミング

が必要Modelname :: weekdays –

+0

@Mik_Dieでそれを参照してください。はい、私は私のプログラミングを改善する必要があります、まだ初心者です。私はDate.today.send(day)にエラーが発生しました - "未定義のメソッド' tuesday 'for Fri、16 Mar 2012:Date "...私はいくつかのアプローチを試みましたが、運はありませんでした。今週の毎日の特定の日付を定義するルビーメソッドがありますか(例:sunday = march 11)? – Jeff

+0

Railsには 'sunday'と' monday'メソッドしかないからです。 Timeオブジェクトを拡張して別のメソッドを追加することはできますが、それはRubyです:) – MikDiet