【发布时间】:2011-12-25 11:15:33
【问题描述】:
我对 Rails 很陌生,想知道最好的方法是什么:
我有一个控制器在数据库中创建一条记录。
如果发生特定的验证错误,我想设置一个标志,但我看不到使用我熟悉的 rails 模式完成此操作的好方法。
我要检测的模型验证是:
validates_uniqueness_of :title
我的控制器正在这样做:
fcs = Entity.create(:title => text)
当上述错误失败时,我可以使用 ActiveModel 错误集合。
我应该如何可靠地设置一个标志,以编程方式表明标题已被占用?
到目前为止我已经考虑过
fcs.errors.messages.has_key?(:title)
但是如果标题由于其他原因失败,这将返回 true。所以我需要更多类似的东西:
fcs.errors.messages[:title]==["has already been taken"]
但这将是一个令人头疼的维护问题,并且还会被不同的语言环境破坏......
那么有谁知道应该如何使用 RoR 来完成这项工作?
感谢您的建议
编辑:建议标志“is_title_duplicated”的示例用法:
if(! fcs.errors.empty?)
json['success']=false
json['errors']=fcs.errors.full_messages
json['title_was_duplicate'] = is_title_duplicated
render :json => json
...
【问题讨论】:
-
你这样做是为了达到什么目的?
-
这是一个 ajax 控制器,它返回一个成功或失败的 json 消息。如果验证失败,则会显示消息集合,并显示咆哮通知。其中一个失败可能是因为存在与节点上具有相同标题的列表。在这种情况下,我想显示一个模式弹出窗口以捕获替代标题,然后再次尝试验证。
标签: ruby-on-rails validation activerecord activemodel