【问题标题】:Customise ActiveModel full_messages自定义 ActiveModel full_messages
【发布时间】:2015-03-11 11:29:31
【问题描述】:

我想从我的自定义验证消息中删除该属性并只显示该消息,所以而不是

School Please Provide Your School Name

我想回来

Please Provide Your School Name

在我的模型中设置

validates :school, presence: { message: 'Please Provide Your School Name' }

消息作为 JSON 响应返回。

查看full_messages方法

# File activemodel/lib/active_model/errors.rb, line 348
def full_messages
  map { |attribute, message| full_message(attribute, message) }
end

我可以用

覆盖它吗
# File activemodel/lib/active_model/errors.rb, line 348
def full_messages
  map { |attribute, message| full_message(message) }
end

我试过了

module ActiveModel
  class Errors
    def full_messages
      map { |attribute, message| full_message(message) }
    end
  end
end

位于/lib/active_model/errors.rb

但是当我尝试运行我的测试 (rspec) 时出现错误

/home/richardlewis/.rvm/gems/ruby-2.2.0@lnf_api/gems/activemodel-4.2.0/lib/active_model/validations.rb:297:in `initialize': wrong number of arguments (1 for 0) (ArgumentError)

我将文件加载到我的 application.rb 中

config.autoload_paths += %W(#{config.root}/lib)

请问我该如何解决?

谢谢

编辑

控制器

class RegistrationsController < Devise::RegistrationsController
skip_before_action :verify_authenticity_token
respond_to :json

def create
 @user = User.new(registration_params)
   if @user.valid?
     @user.save
     render json: { message: I18n.t("devise.registrations.signed_up_but_unconfirmed") }, status: 201
   else
     render json: { message: @user.errors.full_messages }, status: :unprocessable_entity
   end
end

protected
def registration_params
  json_params = ActionController::Parameters.new(JSON.parse(request.body.read))
  json_params.require(:user).permit(:username, :school, :email, :password, :password_confirmation)
 end
end

【问题讨论】:

  • 你在测试中提到了这个问题——你能提供导致错误的代码吗?
  • 抱歉,我措辞不正确..当我运行 rspec 时,由于该错误,不会运行任何测试
  • 好的,现在我知道问题出在哪里了。您能否添加控制器的代码,为您生成意外消息的位置?
  • 我需要在控制器中要求/加载/包含模块吗?
  • 我收到load_missing_constant': Unable to autoload constant ActiveModel::Errors, expected /home/richardlewis/Rails/lnf_api/lib/active_model/errors.rb to define it (LoadError)

标签: ruby-on-rails ruby rspec activemodel


【解决方案1】:

full_message 需要两个参数 attributemessage

更新:避免猴子修补并编辑您的语言环境文件以具有以下内容:

en:
  errors:
    format: "%{message}"

【讨论】:

  • 是的,这将是一个更好的前进方式,而不是覆盖现有的行为。我每秒都会遇到语法错误,但每新行有两个空格不是吗?
猜你喜欢
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
相关资源
最近更新 更多