Ran*_*uin 5 serialization ruby-on-rails
我有一个字段通过默认的AR行为序列化为YAML.它目前在一个哈希数组中作为例子:
[{'name' => 'hi', 'url' => 'bye'},
{'name' => 'hi', 'url' => 'bye'},
{'name' => 'hi', 'url' => 'bye'}]
Run Code Online (Sandbox Code Playgroud)
有没有办法可以在其中一些领域使用一些基本的AR验证?
Lar*_*y K 16
是的,使用该validates_each方法
serialize :urls
validates_each :urls do |record, attr, value|
# value is an array of hashes
# eg [{'name' => 'hi', 'url' => 'bye'}, ...]
problems = ''
if value
value.each{|name_url|
problems << "Name #{name_url['name']} is missing its url. " \
unless name_url['url']}
else
problems = 'Please supply at least one name and url'
end
record.errors.add(:urls, problems) unless problems.empty?
end
Run Code Online (Sandbox Code Playgroud)
补充:您不能使用验证,例如validates_length_of验证方法不了解序列化字段的格式.
该validates_each方法很好,因为它使您能够编写自己的验证方法.如果合适,该方法可以向记录添加错误.
提示:您还可以向:baserecord.errors而不是特定属性添加错误.有时这可以帮助您在视图中格式化错误消息.
| 归档时间: |
|
| 查看次数: |
4481 次 |
| 最近记录: |