[英]Rails nested forms: assign index as value to DB
我正在为酒店建立预订系统,并创建了一个价格模型,该价格模型被房间模型接受为嵌套属性。 到目前为止,一切都很好。 但是,由于我希望有机会保持价格上涨,因此我需要价格模型中的响应时间。 所以基本上,价格:50、80、120以及天数:1、2、3 ...好,所以现在我的问题是:我如何实现将天数自动保存在价格表中,以便用户只需要输入特定日期的价格。
我试图使它与提交到days列的隐藏字段一起工作,但是我无法修复它。 由于控制器生成了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? 我是否需要编写一个表单助手,如果可以,我如何才能增加天数? 我的方法完全错误吗,并且有一种更明显的方法来实现相同的功能? 任何帮助,高度赞赏!
我不完全确定这是您要的内容,但是可以使用以下方法:
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说了什么...
您是否总是想产生20倍的增量?
好吧,这行20.times do
是一个循环。 我该怎么办?
20.times do |t|
increment = @center.increments.build(days: t+1) # t+1 since t starts in 0
end
通过这种方式,您可以在实例构建时设置日期
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.