我有一个表单字段,用户输入一串标记"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"
填充表单的输入字段,而不是字符串数组。有没有办法在返回填充验证失败的表单字段之前对其进行操作?
答案 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 interpolations:attribute
,model
& #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:
;