【发布时间】:2015-11-30 22:23:27
【问题描述】:
我在将数组数据保存到数据库时遇到问题。
目前,我使用的是嵌套表单,有 3 个模型,如下所示。
deal.rb
class Deal < ActiveRecord::Base
has_many :deal_days, :dependent => :destroy
accepts_nested_attributes_for :deal_days, allow_destroy: true
end
deal_day.rb
class DealDay < ActiveRecord::Base
belongs_to :deal
has_many :deal_times, :dependent => :destroy
accepts_nested_attributes_for :deal_times, allow_destroy: true
end
deal_time.rb
class DealTime < ActiveRecord::Base
belongs_to :deal_day
end
我的目标是允许用户在复选框中选择交易正在进行的多天。例如,如果用户选择星期一和星期二,我希望数组中包含星期一和星期二。 下面显示的是我当前的 deal_day 数据库:
create_table "deal_days", force: true do |t|
t.integer "deal_id"
t.string "day", default: [], array: true
t.datetime "created_at"
t.datetime "updated_at"
end
deal_day 的格式如下,在一个名为 _deal_day_fields 的文件中:
<fieldset>
Enter Days (e.g Mon - Fri)<br>
<td><input type = "checkbox" name = "day[]" value = "Mon" /></td>
<td><input type = "checkbox" name = "day[]" value = "Tue" /></td>
<td><input type = "checkbox" name = "day[]" value = "Wed" /></td>
<td><input type = "checkbox" name = "day[]" value = "Thur" /></td>
<td><input type = "checkbox" name = "day[]" value = "Fri" /></td>
<td><input type = "checkbox" name = "day[]" value = "Sat" /></td>
<td><input type = "checkbox" name = "day[]" value = "Sun" /></td>
<%= link_to "Delete", '#', class: "remove_fields" %><br>
<%= f.hidden_field :_destroy %>
<%= f.fields_for :deal_times do |builder| %>
<%= render 'deal_time_fields', f: builder %>
<% end %>
<%= link_to_add_fields "Add another time period", f, :deal_times %>
</fieldset>
对于交易控制器参数,我已将其设置为:
params.require(:deal).permit(:name_of_deal, :type_of_deal, :description, :start_date, :expiry_date, :location, :t_c,
:pushed,:redeemable, :multiple_use, :image,
deal_days_attributes: [:id, {day: []}, :_destroy,
deal_times_attributes: [:id, :started_at, :ended_at, :_destroy]])
当我运行表单时,我的所有数据都正确保存到数据库中,除了 :day 数组。它以 [] 的形式保存到数据库中。
如果有人能告诉我我的错误,我将不胜感激。谢谢!
【问题讨论】:
-
此链接可能对您有所帮助stackoverflow.com/questions/6360739/…
-
如果我通过选择星期日进行正确测试,这将保存在数据库中,因为如果你有 N name = "day[]" name = "day[]" ......最后一个将被覆盖并发送到数据库进行存储。
-
嗨@praaveen,我尝试了你的建议,但它仍然只保存[]。我已经阅读了您发布的链接,如果我无法找到解决方案,我可能会创建 7 个不同的属性来命名星期一到星期日。不过谢谢!
-
通过打印参数签入你的控制器。
-
为什么要存储一个数组? SQL 数组是一个巨大的查询痛苦。我建议您为一周中的每一天存储一个布尔值 - 您可以保留复选框结构,并且您可以更轻松地处理和查询数据类型。
标签: ruby-on-rails arrays ruby postgresql