Rails - 在失败的验证时将数组属性渲染为字符串

时间:2016-01-30 02:17:19

标签: ruby-on-rails arrays validation

我有一个表单字段,用户输入一串标记"foo, bar, foobar"。这将作为item_params[:tag_list]发送给控制器。在控制器中,我的create操作包含@item = Item.create(tag_list: item_params[:tag_list])。这会导致tag_list属性填充为字符串["foo", "bar", "foobar"]的数组。

验证失败时,我需要使用"foo, bar, foobar"填充表单的输入字段,而不是字符串数组。有没有办法在返回填充验证失败的表单字段之前对其进行操作?

2 个答案:

答案 0 :(得分:0)

您使用的是acts-as-taggable-on宝石吗? 希望这一行可以解决你的问题

f.text_field :tag_list, value: f.object.tag_list.join(', ')

或者您必须覆盖tag_list模型

中的Item方法
alias_method :array_tag_list, :tag_list
def tag_list
  array_tag_list.join(', ')
end

答案 1 :(得分:0)

非常惊讶该param被视为阵列。

抱歉,误读了您的问题(推测您需要验证消息)。将留给子孙后代:

每当您使用value时,您都可以访问three interpolationsattributemodel&amp; #app/models/item.rb class Item < ActiveRecord::Base validates :tag_list, x: { message: "%{value} is not valid" } end

Proc

根据docs,您可以传递#app/models/item.rb class Item < ActiveRecord::Base validates :tag_list, x: { message: ->(key, data) do "#{data[:value].join} is not valid" end } end 进行直接操作:

value

-

要填充该字段,您需要使用该属性的= text_field :tag_list, value: f.object.tag_list.join 属性,并填充data from the form object

;