【问题标题】:Rails override validation messageRails 覆盖验证消息
【发布时间】:2010-11-12 18:03:17
【问题描述】:

我想在验证消息中看到无效值。

validates_uniqueness_of :event, :scope => :user_id

结果:“标题已被占用” 我想: "事件 #{event} 已被 #{user} 占用"​​p>

我正在尝试这样做,面包不工作:

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

【问题讨论】:

  • 我假设 'event' 是另一个 activemodel 类?
  • 仅举例。不在实际项目中

标签: ruby-on-rails


【解决方案1】:

来自 ActiveRecord 源代码注释:

值 :model、:attribute 和 :value 始终可用于 插值 :count 是 适用时可用。可以使用 用于复数。

所以你可以简单地将你的信息写成

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

【讨论】:

  • 谢谢,但有没有办法让%{model} 输出以空格分隔的型号名称,而不是仅首字母大写的型号名称? IE。 RocketScience 打印为 Rocketscience,但在插值中使用 %{model} 时,我会对 Rocket Science 或 Rocket Science 感到满意。
  • @mkelley33 使用stackoverflow.com/a/18392648/4010391 的这个答案将消息指向一个 lambda,然后您可以插入 self,这将返回对模型的引用。
【解决方案2】:

使用 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 看起来像您正在尝试在名为 :activerecord 的符号上调用 .errors 方法。)

第二个参数包含一个带有字段的哈希,可以帮助您“漂亮”您的错误响应。如果我尝试添加带有标点符号的用户名,例如“Superstar!!!”,它将如下所示:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      使用 lambda:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-31
        • 1970-01-01
        • 2020-01-17
        • 2018-01-28
        • 1970-01-01
        • 2014-08-01
        • 2014-04-04
        • 2017-09-06
        相关资源
        最近更新 更多