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 所说的...