【问题标题】:errors(:base) << message leads undefined method `map' for nil:NilClasserrors(:base) << message 导致 nil:NilClass 的未定义方法 `map'
【发布时间】:2012-09-05 02:33:03
【问题描述】:

我正在尝试使用 Rails 3.2 将 ActiveMerchant 集成到我的网站中。目前,我有代码使用 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#create

显示第 18 行出现的 app/views/orders/_form.html.erb:

nil:NilClass 的未定义方法 `map' 提取的源代码(围绕行

18):

15: 16: 17:
18: 19: 20: 21:

如果您有任何建议,请告诉我。谢谢

【问题讨论】:

    标签: ruby-on-rails activemerchant


    【解决方案1】:

    您收到此错误是因为您的@print_dimensionsnil,而collection_select 代码的一部分是它在您应该传递到那里的可枚举对象上调用map

    我无法从提供的代码中看出为什么它为零 - 没有提到 print_dimensions。但我的猜测是,您在 #new 操作中的某处初始化此变量,而不是在 #create 操作的“失败”部分。但这只是猜测。

    【讨论】:

      【解决方案2】:

      我的问题是由于我的 collection_select 数据为 Nil。本质上,当我尝试执行新操作但失败时,它会被传递给 Create,它会尝试重新呈现新页面,但不再具有 collection_select 数据。

      这是一个与我的类似答案的链接 - link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-22
        相关资源
        最近更新 更多