Rails 嵌套形式:将索引作为值分配给数据库
Rails nested forms: assign index as value to DB
我正在构建一个酒店预订系统并创建了一个价格模型,房间模型将其作为嵌套属性接受。到目前为止一切顺利,一切正常。但是,由于我想提供能够维持价格增量的机会,因此我需要价格模型中的响应天数。所以基本上,价格:50、80、120 以及天数:1、2、3 ...好吧,现在我的问题是:我怎样才能实现天数自动保存在价格 table 中,这样用户只需输入特定日期的价格。
我试图让它与提交到天数列的隐藏字段一起使用,但我无法修复它。因为控制器生成了 20 个增量,所以我尝试使用 fields_for 助手生成的索引。
这是我的 控制器的相关部分:
def new
@room = current_user.rooms.build
20.times do
increment = @room.increments.build
end
end
这是我的观点:
<%= form_for @room do |f| %>
#...
<%= f.fields_for :increments do |ff| %>
<%= ff.text_field :price, placeholder: 'price' %>
<%= ff.hidden_field :days, value: 'index' %>
关于生成 20 个价格字段的控制器,您是否有任何想法可以使我的 hidden_field 的值等于 1...20?我需要写一个表单助手吗?如果需要,我怎样才能让它增加天数?我的方法是否完全错误,是否有更明显的方法来实现相同的功能?非常感谢任何帮助!
你总是想生成20倍的增量吗?
嗯,这一行 20.times do
是一个循环。我会怎么做:
20.times do |t|
increment = @center.increments.build(days: t+1) # t+1 since t starts in 0
end
通过这种方式,您可以在创建实例时设置天数
我不完全确定这是你要问的,但你可以使用类似的东西吗:
def new
@room = current_user.rooms.build
(1..20).each do |i|
@center.increments.build(days: i)
end
end
或单行建筑:
(1..20).each { |i| @center.increments.build(days: i) }
(在循环中分配 increment
没有在任何地方使用,并且会更新到循环中每个元素的最后一个新增量;因此我已经删除了它。)
编辑:@oscar 所说的...
我正在构建一个酒店预订系统并创建了一个价格模型,房间模型将其作为嵌套属性接受。到目前为止一切顺利,一切正常。但是,由于我想提供能够维持价格增量的机会,因此我需要价格模型中的响应天数。所以基本上,价格:50、80、120 以及天数:1、2、3 ...好吧,现在我的问题是:我怎样才能实现天数自动保存在价格 table 中,这样用户只需输入特定日期的价格。
我试图让它与提交到天数列的隐藏字段一起使用,但我无法修复它。因为控制器生成了 20 个增量,所以我尝试使用 fields_for 助手生成的索引。
这是我的 控制器的相关部分:
def new
@room = current_user.rooms.build
20.times do
increment = @room.increments.build
end
end
这是我的观点:
<%= form_for @room do |f| %>
#...
<%= f.fields_for :increments do |ff| %>
<%= ff.text_field :price, placeholder: 'price' %>
<%= ff.hidden_field :days, value: 'index' %>
关于生成 20 个价格字段的控制器,您是否有任何想法可以使我的 hidden_field 的值等于 1...20?我需要写一个表单助手吗?如果需要,我怎样才能让它增加天数?我的方法是否完全错误,是否有更明显的方法来实现相同的功能?非常感谢任何帮助!
你总是想生成20倍的增量吗?
嗯,这一行 20.times do
是一个循环。我会怎么做:
20.times do |t|
increment = @center.increments.build(days: t+1) # t+1 since t starts in 0
end
通过这种方式,您可以在创建实例时设置天数
我不完全确定这是你要问的,但你可以使用类似的东西吗:
def new
@room = current_user.rooms.build
(1..20).each do |i|
@center.increments.build(days: i)
end
end
或单行建筑:
(1..20).each { |i| @center.increments.build(days: i) }
(在循环中分配 increment
没有在任何地方使用,并且会更新到循环中每个元素的最后一个新增量;因此我已经删除了它。)
编辑:@oscar 所说的...