error(:base) ‹‹ сообщение ведет к неопределенному методу `map' для nil:NilClass

Я пытаюсь интегрировать ActiveMerchant в свой веб-сайт с помощью Rails 3.2. В настоящее время у меня есть код для общей проверки кредитной карты с использованием действительной функции ActiveMerchant, которая возвращает сообщение об ошибке, если карта недействительна. Если есть ошибки, я хотел бы добавить их к ошибкам и повторно отобразить представление, чтобы отобразить представление с ошибками. Ниже приведен код в моем контроллере.

Сначала я создаю кредитную карту

def credit_card
    first_name = User.find(user_id).first_name
    last_name = User.find(user_id).last_name
    @credit_card ||= ActiveMerchant::Billing::CreditCard.new(
      :brand              => card_type,
      :number             => card_number,
      :verification_value => card_verification,
      :month              => card_expiration.month,
      :year               => card_expiration.year,
      :first_name         => first_name,
      :last_name          => last_name
    )
  end

Далее я проверяю карточку и пытаюсь добавить ошибки, возвращенные в базу ошибок для просмотров

# Active Merchant Credit Card validation

def validate_card
    unless credit_card.valid?
      credit_card.errors.full_messages.each do |message|
       errors[:base] << message
      end
    end
end

Наконец я вызываю valid_card при создании

validate :validate_card, :on => :create

Однако я получаю следующую ошибку

NoMethodError в заказах#создать

Показано app/views/orders/_form.html.erb, где строка № 18 поднята:

неопределенный метод `map' для nil:NilClass Извлеченный исходный код (вокруг строки

18):

15: 16: 17: ‹%= f.label :print_dimension %›
18: ‹%= f.collection_select :print_dimension_id, @print_dimensions, :id, :dimension %› 19: 20: 21: ‹%= f.label :delivery_option_id %›

Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения. Спасибо


person Pan Wangperawong    schedule 12.09.2012    source источник


Ответы (2)


Вы получаете эту ошибку, потому что ваш @print_dimensions равен nil, а часть кода collection_select заключается в том, что он вызывает map для перечисляемого объекта, который вы должны передать туда.

Я не могу сказать, почему это ноль из предоставленного кода - нет упоминания о print_dimensions. Но я предполагаю, что вы инициализируете эту переменную где-то в действии #new, а не в части «сбой» действия #create. Но это всего лишь предположение.

person Radek Paviensky    schedule 12.09.2012

Моя проблема была связана с тем, что мои данные collection_select были нулевыми. По сути, когда я пытаюсь выполнить действие «Новое», и оно терпит неудачу, оно затем передается в «Создать», который пытается повторно отобразить новую страницу, но больше не имеет данных collection_select.

Вот ссылка на ответ, похожий на мой - ссылка

person Pan Wangperawong    schedule 21.09.2012