当前位置 : 主页 > 编程语言 > ruby >

ruby-on-rails – Rails中多个表单复选框的数据库结构

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有一个我正在研究的rails应用程序,它允许用户创建一个计划.在这样做时,他们应该能够选择一周中哪一天发生事件.我计划在表单中执行此操作的方式是每个工作日旁边的复选框,如下所
我有一个我正在研究的rails应用程序,它允许用户创建一个计划.在这样做时,他们应该能够选择一周中哪一天发生事件.我计划在表单中执行此操作的方式是每个工作日旁边的复选框,如下所示:

<%= f.check_box :monday %> <%= f.label :monday %>
<%= f.check_box :tuesday %> <%= f.label :tuesday %>
<%= f.check_box :wednesday %> <%= f.label :wednesday %>

等等…

但是,我发现这可能不是一种非常有效的处理方法,将每个日期作为布尔值存储在数据库中.在’show’视图中​​显示日期非常困难;我必须做点什么

Event Dates:
<% if @event.monday? %>
  Monday
<% end %>
<% if @event.tuesday? %>
  Tuesday
<% end %>
<% if @event.wednesday? %>
  Wednesday
<% end %>

这对我来说似乎不太理想.

我的另一个想法是在数据库中创建一个包含所有事件日期的字符串列,使用attr_accesors和模型方法创建字符串after_create.但是,在这种情况下,用户将如何编辑事件?

它让我思考,这里必定有一些我不了解的最佳实践(我以前从未试图用这种结构创造一些东西).

有什么建议?

谢谢!

不要这样做:

My other idea would be to just create one string column in the database that holds all of the event dates, using attr_accesors and a model method to create the string after_create.

这样的事情只会导致像每天查询一样可怕的丑陋问题;例如,如果您将您的日期存储在一个列中,您将如何计算星期一可用的事件数量?

相反,保留你的七个布尔值,并为你的模型添加一个简单的方便方法,以一些更方便的格式返回日期.也许这样的东西:

def days
    Date.DAYNAMES.map { |d| read_attribute(d.downcase) }
end

然后你可以简单地在视图中迭代@ event.days并将日期数字映射到名称:

<% @event.days.each_with_index do |on_day, i| %>
    <% if on_day %>
        <%= Date.DAYNAMES[i] %>
    <% end %>
<% end %>

当然,日期方法的具体细节以及您在ERB中如何处理它将取决于您的具体情况.

网友评论