Я использую rail4 и Ruby 2.0, я хочу, чтобы добавить метод «first_error» в ActiveModel :: Ошибки, которые должны быть доступны в течение моего приложения, поэтому я наткнулся на следующие 2 возможности :Rifinements или обезьяна латание рельсы 4
- Monkey Patch
- утонченности
Я успешно реализован первый подход просто путем создания инициализатор "custom_model_error.rb"
class ActiveModel::Errors
def first_error
if !self.first
return nil
end
data = Hash.new
data['error_code'] = '900'
data['message'] = self.first.join(' ')
return data
end
end
Но когда я пытался реализовать второй подход, определив модуль в Lib каталоге:
module RefineErrors
refine ActiveModel::Errors do
def first_error
if !self.first
return nil
end
data = Hash.new
data['error_code'] = '900'
data['message'] = self.first.join(' ')
return data
end
end
end
, а затем с помощью этого модуля в ApplicationController:
class ApplicationController < ActionController::API
using RefineErrors
я получаю сообщение об ошибке undefined method 'using'.
Теперь мои вопросы:
, который является лучшим подходом к реализации в настоящее?
обезьян заплат, как правило, не рекомендуется, а также уточнений является экспериментальной особенностью рубина 2.0
Также хочу знать , как реализовать это с помощью уточнений в rails4?
Если есть какой-либо другой подход, который следует соблюдать в этом сценарии, пожалуйста, укажите это также.
Спасибо за помощь Ashutosh, пожалуйста, пройдите код, я думаю, что реализую его так же, как описано в ссылке, но, как я упоминал ранее, я получаю ** неопределенный метод 'using 'для ApplicationController: Class (NoMethodError) ** при использовании ключевого слова 'using' внутри ApplicationController. – hsaini734
Проверьте установку раздела выше ссылки. Проблема заключается в том, что вы используете патч по умолчанию ruby 2.0 (может быть, 481, что не поддерживает его должным образом), вам нужно добавить специальный патч, упомянутый в разделе установки выше ссылки .если вы пытаетесь сделать выше с ruby 2.1, вы не получите ошибку. –