gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:30:53 24 4
gpt4 key购买 nike

我有一个正在开发的 Rails 应用程序,它允许用户创建时间表。这样做时,他们应该能够选择事件发生在一周中的哪几天。我计划在表格中执行此操作的方式是在每个工作日旁边的复选框,如下所示:

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

等...

但是,我突然想到,将每个日期作为 bool 值存储在数据库中可能不是一种非常有效的处理方式。在“显示” View 中显示日期将非常困难;我将不得不做类似的事情

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.

这类事情只会导致一些问题,比如让每天的查询变得一团糟;例如,如果将您的日期混合存储在一个列中,您将如何计算星期一有多少事件可用?

相反,保留您的七个 bool 值并向您的模型添加一个简单的便捷方法,以更方便的格式返回日期。也许是这样的:

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

然后您可以在 View 中简单地遍历 @event.days 并将日期数字映射到名称:

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

days 方法的具体细节以及您在 ERB 中如何处理它当然取决于您的具体情况。

关于ruby-on-rails - Rails 中多表单复选框的数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6660415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com