god*_*yan 3 forms checkbox database-design ruby-on-rails ruby-on-rails-3
我有一个我正在研究的rails应用程序,它允许用户创建一个计划.在这样做时,他们应该能够选择一周中哪一天发生事件.我计划在表单中执行此操作的方式是每个工作日旁边的复选框,如下所示:
<%= f.check_box :monday %> <%= f.label :monday %>
<%= f.check_box :tuesday %> <%= f.label :tuesday %>
<%= f.check_box :wednesday %> <%= f.label :wednesday %>
Run Code Online (Sandbox Code Playgroud)
等等...
但是,我发现这可能不是一种非常有效的处理方法,将每个日期作为布尔值存储在数据库中.在'show'视图中显示日期非常困难; 我必须做点什么
Event Dates:
<% if @event.monday? %>
Monday
<% end %>
<% if @event.tuesday? %>
Tuesday
<% end %>
<% if @event.wednesday? %>
Wednesday
<% end %>
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎不太理想.
我的另一个想法是在数据库中创建一个包含所有事件日期的字符串列,使用attr_accesors和模型方法创建字符串after_create.但是,在这种情况下,用户将如何编辑事件?
它让我思考,这里必定有一些我不了解的最佳实践(我以前从未试图用这种类型的结构创建东西).
有什么建议?
谢谢!
不要这样做:
我的另一个想法是在数据库中创建一个包含所有事件日期的字符串列,使用attr_accesors和模型方法创建字符串after_create.
这样的事情只会导致像每天查询一样可怕的丑陋问题; 例如,如果您将您的日期存储在一个列中,您将如何计算星期一可用的事件数量?
相反,保留你的七个布尔值,并为你的模型添加一个简单的方便方法,以一些更方便的格式返回日期.也许这样的东西:
def days
Date.DAYNAMES.map { |d| read_attribute(d.downcase) }
end
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地@event.days在你的视图中迭代并将日期数字映射到名称:
<% @event.days.each_with_index do |on_day, i| %>
<% if on_day %>
<%= Date.DAYNAMES[i] %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
days当然,该方法的具体细节以及您在ERB中如何处理它将取决于您的具体情况.
| 归档时间: |
|
| 查看次数: |
1233 次 |
| 最近记录: |