2014-12-27 8 views
0

Я использую 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?

Если есть какой-либо другой подход, который следует соблюдать в этом сценарии, пожалуйста, укажите это также.

ответ

0

Если вы используете рубин 2.0, вам нужно использовать патч рубина, которые поддерживают refinements.take взгляд на здесь http://timelessrepo.com/refinements-in-ruby
Эта ссылка также разделяют власть обезьяны заплат и уточнений.

+0

Спасибо за помощь Ashutosh, пожалуйста, пройдите код, я думаю, что реализую его так же, как описано в ссылке, но, как я упоминал ранее, я получаю ** неопределенный метод 'using 'для ApplicationController: Class (NoMethodError) ** при использовании ключевого слова 'using' внутри ApplicationController. – hsaini734

+0

Проверьте установку раздела выше ссылки. Проблема заключается в том, что вы используете патч по умолчанию ruby ​​2.0 (может быть, 481, что не поддерживает его должным образом), вам нужно добавить специальный патч, упомянутый в разделе установки выше ссылки .если вы пытаетесь сделать выше с ruby ​​2.1, вы не получите ошибку. –

 Смежные вопросы

  • Нет связанных вопросов^_^