【问题标题】:validation custom message for rails 3rails 3 的验证自定义消息
【发布时间】:2011-07-20 04:43:31
【问题描述】:

Rails 引入了新方法来验证模型内的属性。 当我使用

validates :title, :presence => true

它可以工作,但是当我尝试添加自定义消息时

validates :title, :presence => true,:message => "Story title is required"

产生错误

Unknown validator: 'message'

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 validation activerecord


    【解决方案1】:

    试试这个

    validates :title, presence: { message: "Story title is required" }
    

    【讨论】:

    • 如何从上面的错误消息中删除 :title ?上面显示为“需要标题故事标题”。我想要“需要故事标题”。谢谢。
    • 这个答案中的=> true 去了哪里?没有必要吗?
    • @dukedave 奇怪的是没有必要。你可以将任何“真实”的东西传递给presence
    • @NotDan,链接已损坏。
    • @Mayumi - 您可以通过编写手动验证并将错误添加到:base 来从消息中删除属性名称,例如errors.add(:base, "Story title is required)
    【解决方案2】:

    带有条件的布尔值的自定义消息可能是:

    validates :foo,  inclusion: { in: [true, false], message: "cannot be blank" }, if: :bar?
    

    【讨论】:

      【解决方案3】:

      您可以使用 rails 3 的 HUMANIZED_ATTRIBUTES 。 例如在上面的情况下,它会像:

      HUMANIZED_ATTRIBUTES = {
      :title => "story"
      }
       def self.human_attribute_name(attr, options={})
          HUMANIZED_ATTRIBUTES[attr.to_sym] || super
      end
      

      它会给你错误信息,用故事替换模型属性标题。

      【讨论】:

        【解决方案4】:

        实际上,我以更好的方式做到了这一点。如果您想从消息中删除字段标题,您应该在 _form.htmk.erb 视图中使用它:

        正如您在此视图中看到的:

        <ul>
          <% @article.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
          <% end %>
        </ul>
        

        替换为:

        <ul>
          <% @article.errors.each_with_index do |msg, i| %>
          <li><%= msg[1] %></li>
          <% end %>
        </ul>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-12
          相关资源
          最近更新 更多