繁体   English   中英

Rails嵌套表单:将索引作为值分配给DB

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM