根据上下文自定义验证错误消息

时间:2014-04-27 05:01:46

标签: ruby-on-rails ruby-on-rails-4

我需要为同一模型提供不同的错误消息,具体取决于表单的上下文和位置。

对于验证User

的存在的first_name模型
  • 在后台页面中,可以获得验证消息"名字不能为空白"
  • 在注册页面中,邮件应为"请输入您的名字"

我正在寻找一个干净且以最佳实践为导向的解决方案,因为我不想破解视图助手等。

任何提示都表示赞赏,谢谢

2 个答案:

答案 0 :(得分:1)

您可以在User模型中使用validate方法。像这样的东西

validate do |user|
 if user.first_name.blank? && user.id.blank? 
   # id blank means the user is in registration page as he is new user. 
   user.errors.add(:base, "Please type your first name")
 elsif user.first_name.blank?
   user.errors.add(:base, "First name can't be blank")
 end
end

答案 1 :(得分:1)

可能正在使用hidden_fieldattr_accessor,我希望你能达到你想要的效果,

表格1:

<%= f.hidden_field :check_form, :value => true %>

表格2:

<%= f.hidden_field :check_form, :value => false %>

您还需要将check_form值传递给模型。

型号:

attr_accessor :check_form
validates_presence_of :first_name, :if => :check_form_is_true?, :message => "First Name can't be blank"
validates_presence_of :first_name, :unless => :check_form_is_true? //here you need to use i18n oriented translation to show the custom error message

private
def check_form_is_true?
  check_form == true
end

配置/区域设置/ en.yml

en:
  activerecord:
    attributes:
      user:
        first_name: ""
    errors:
      models:
        user:
          attributes:
            first_name:
              blank: "Please type your first name"

希望有所帮助:)