Rails - 每日复选框的每周时间表

时间:2012-03-16 05:25:21

标签: ruby-on-rails ruby-on-rails-3 events calendar

我的应用有几个项目/任务调度功能。我首先使用Ice_cube gem创建了一个简单的演示,它非常适合安排重复发生的事件......但是我担心每个星期几的范围/操作;所以,我创建了一个包含7个布尔复选框的计划表单。

请参阅此帖子以获取示例> weekday events。我无法得到推荐的解决方案,但我的要求略有不同。

相反,我编写了一些有效的代码 - 但它非常笨重/丑陋。我正在寻找有关如何编写允许我的方法的想法:为用户选择的日期范围分配每个工作日的日历日期。

索引视图:

<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

模型 - 没有添加代码。

任何帮助都非常感谢!

1 个答案:

答案 0 :(得分: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 %>

等等