errors(:base)<<消息引导未定义的方法`map'为nil:NilClass

时间:2012-09-12 05:53:32

标签: ruby-on-rails activemerchant

我正在尝试使用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

但是我收到以下错误

  

订单#create中的NoMethodError

     

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

     

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

     

18):

     

15:16:17:&lt;%= f.label:print_dimension   %&gt;
18:&lt;%= f.collection_select:print_dimension_id,   @print_dimensions,:id,:dimension%&gt; 19:20:21:&lt;%= f.label:delivery_option_id%&gt;

如果您有任何建议,请与我们联系。谢谢

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我的问题是由于我的collection_select数据为零。基本上当我尝试执行一个新操作并且它失败时,它会被传递给Create,它尝试重新渲染New页面,但不再有collection_select数据。

以下是与我的答案相似的链接 - link