2016-03-17 2 views
1

Я пытаюсь получить Ошибки Active Model, работающие в стандартном классе ruby, который я использую для полосы.Добавление ошибок ActiveModel в класс ruby ​​

class Payment 
    attr_reader :user, :token, :errors 
    attr_accessor :base 
    extend ActiveModel::Naming 

    def initialize(args) 
    @user = args[:user] 
    @token = args[:stripe_token] 
    @errors = ActiveModel::Errors.new(self) 
    end 

    def checking_account 
    begin 
     account = Stripe::Account.retrieve(user.stripe_account_id) 
     account.external_account = token 
     account.save 
    rescue Stripe::StripeError => e 
     errors.add(:base, e.message) 
    end 
    end 

    # The following methods are needed to be minimally implemented 

    def read_attribute_for_validation(attr) 
    send(attr) 
    end 

    def Payment.human_attribute_name(attr, options = {}) 
    attr 
    end 

    def Payment.lookup_ancestors 
    [self] 
    end 
end 

теперь я делаю checking_account неудачу на цели, не поставляя фишку, и я только что вернулся массив в настоящее время говорят:

=> ["Invalid external_account object: must be a dictionary or a non-empty string. See API docs at https://stripe.com/docs'"] 

теперь я следовал шаги по http://api.rubyonrails.org/classes/ActiveModel/Errors.html так Я не уверен, почему это не работает, никто не знает, как это исправить?

, когда я звоню:

Payment.new(user: User.find(1)).managed_account он запускает массив выше, и если я пытаюсь вызвать .errors на том, что я получаю

NoMethodError: undefined method `errors' for #<Array:0x007f80989d8328> 

, который, очевидно, потому, что это массив и формат ISN Правильно.

+0

определить «не работает». – sevenseacat

+0

'payment = Payment.new (пользователь: User.find (1))', а затем 'payment.errors' вы пробовали этот путь? –

+0

да вот что я сделал –

ответ

0

Код, который у вас есть, должен заполнить errors. Проблема в том, что вы не можете позвонить .errors по адресу checking_account, потому что возвращаемое значение от checking_account является массивом, а не экземпляром платежа. Вы должны иметь возможность делать эти звонки отдельно на консоли для просмотра:

payment = Payment.new(user: User.find(1)) # Returns Payment instance 
payment.checking_account 
payment.errors # Calls `errors` on Payment instance 

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

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