【问题标题】:Submit array elements in a rails form以 rails 形式提交数组元素
【发布时间】:2013-09-04 11:30:20
【问题描述】:

我有一个邮资表,其中包含一个使用 postgresql 的数组类型的费率列。 该数组包含 3 个值,例如 [1.99, 2.99,5.99]。 我不知道如何正确提交表单,我想为数组的每个元素显示一个字段。

我当前的非工作代码是;

    = form_for [:admin,@postage] do |f|
      .field-box
        = f.label :name
        = f.text_field :name
        = f.label "UK"
        = text_field_tag "rate[]"
        = f.label 'EU'
        = text_field_tag "rate[]"
        = f.label "Rest of World"
        = text_field_tag "rate[]"

表单在参数中传递但不保存到数据库中

Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxx=", "postage"=>{"name"=>"Item1"}, "rate"=>["1.99","2.99","5.99"], "button"=>"", "id"=>"2"}

如何正确设置表单,订单是否始终不变?

【问题讨论】:

  • rate数组的值是用户提供的并在表单中提交的吗?
  • 是的,它们是来自用户的输入
  • 并且rate@postage 的一部分吗?即,你能打电话给@postage.rate吗?
  • 您在模型中使用过serialize :rate
  • 是的 rate 是 postage 的一个属性,因为 rate 列是 'array' 类型,所以没有序列化

标签: ruby-on-rails forms postgresql ruby-on-rails-4


【解决方案1】:

看起来它正在正确序列化。你在使用 Rails 4 吗?如果是这样,请检查控制器中的许可方法。对于 PG 数组,它应该如下所示:

params.permit({rate: []})

另外,我建议将列名更改为费率。 :)

【讨论】:

  • 我之前绝对没有见过 PG 数组的许可实现,它在文档中的某个地方吗?
  • 不确定它在文档中的位置,但我们一直在使用这种语法没有问题。这是一篇关于它的文章:theotherzach.com/writes/2013/3/11/…
  • 你试过这个语法吗?很想看看它是否能解决问题!
  • 我不久前放弃了使用 PG 数组类型,但我可以在之前的控制台中看到“未经许可的参数”,但不知何故我没有看到。感谢您的链接。
【解决方案2】:

好的,首先我相信你的模型类中仍然需要serialize :rate。 但是要使该速率与您在开始时显示的格式相匹配,您需要执行rate = rate.map {|rt| rt.to_f}(是的,我知道必须有一种方法来简化它)。

【讨论】:

  • 不需要序列化,因为正在使用 postgresql 原生数组类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 2011-03-06
相关资源
最近更新 更多