当前位置:  开发笔记 > 人工智能 > 正文

Rails覆盖验证消息

如何解决《Rails覆盖验证消息》经验,为你挑选了4个好方法。

我想在验证消息中看不到有效值.

validates_uniqueness_of :event, :scope => :user_id

结果:"已经采取了标题"我想:"#{user}已经采取了#{event}事件"

我正在尝试这样做,发髻不工作:

validates_uniqueness_of :event, :scope => :user_id, :message=>"#{self.event} already has been taken by #{self.user}"

Harish Shett.. 13

来自ActiveRecord源代码评论:

值:model,:attribute和:value始终可用于插值值:count适用时可用.可用于复数化.

所以你可以简单地把你的消息写成

validates_uniqueness_of :event, :scope => :user_id, 
                        :message=>"{{value}} is already taken"


Rollo Tomazz.. 6

好吧,实际上在Rails 3.x中它既不是%{{value}}也不是{{value}},而是%{value}.



1> Harish Shett..:

来自ActiveRecord源代码评论:

值:model,:attribute和:value始终可用于插值值:count适用时可用.可用于复数化.

所以你可以简单地把你的消息写成

validates_uniqueness_of :event, :scope => :user_id, 
                        :message=>"{{value}} is already taken"



2> Rollo Tomazz..:

好吧,实际上在Rails 3.x中它既不是%{{value}}也不是{{value}},而是%{value}.



3> Jaime Bellmy..:

使用lambda,但至少在更新版本的Rails中,ActiveRecord会尝试将两个参数传递给该lambda,并且需要考虑它们.使用更简单的示例,假设我们要确保用户名仅包含字母数字字符:

validates_format_of :username, :with => /^[a-z0-9]+$/i, 
    :message => lambda{|x,y| "must be alphanumeric, but was #{y[:value]}"}

传递给lambda的第一个参数是一个奇怪的不那么小的符号,非常适合告诉机器人出了什么问题:

:"activerecord.errors.models.user.attributes.username.invalid"

(如果你对上面的符号感到困惑,符号可以包含的不仅仅是字母,数字和下划线.但是如果它们有,你必须在它们周围加上引号,因为否则:activerecord.errors看起来你正试图调用.errors方法一个叫做的符号:activerecord.)

第二个参数包含一个哈希,其中的字段将帮助您"提升"您的错误响应.如果我尝试添加带有标点符号的用户名,例如"Superstar !!!",它将看起来像这样:

{
  :model=>"User", 
  :attribute=>"Username", 
  :value=>"Superstar!!!"
}



4> shingara..:

使用lambda:

validates_uniqueness_of :event, :scope => :user_id, :message=> lambda { |e| "#{e.event} already has been taken by #{e.user}"}

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有