【问题标题】:Rails nested forms: assign index as value to DBRails 嵌套表单:将索引作为值分配给 DB
【发布时间】:2017-09-08 15:35:53
【问题描述】:

我正在为酒店构建一个预订系统并创建了一个价格模型,房间模型将其作为嵌套属性接受。到目前为止一切顺利,一切正常。但是,由于我想提供能够保持价格增量的机会,因此我需要在我的价格模型中使用响应天数。所以基本上,价格:50、80、120 以及天数:1、2、3 ...好的,所以现在我的问题是:如何实现天数自动保存在价格表中,以便用户只需要输入特定日期的价格。

我试图让它与提交到天数列的隐藏字段一起工作,但我无法修复它。由于控制器生成了 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?我是否需要编写一个表单助手,如果是,我怎样才能让它添加天数?我的方法完全错了吗?还有更明显的方法可以实现相同的功能吗?任何帮助都非常感谢!

【问题讨论】:

    标签: ruby-on-rails ruby database html erb


    【解决方案1】:

    我不完全确定这是您要问的,但您可以使用以下内容:

    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 说了什么...

    【讨论】:

    • 使用(1..20)20.times优雅得多
    【解决方案2】:

    你总是想生成 20 倍的增量吗?

    这行20.times do 是一个循环。我会做什么将是这样的:

    20.times do |t|
     increment = @center.increments.build(days: t+1) # t+1 since t starts in 0
    end
    

    通过这种方式,您可以设置构建实例的日期

    【讨论】:

      猜你喜欢
      • 2019-07-17
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      相关资源
      最近更新 更多