0

我正在尝试使用 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 的未定义方法“map”: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 %>

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

4

2 回答 2

0

您收到此错误是因为您的@print_dimensionsisnil和部分collection_select代码是它调用map了您应该在那里传递的可枚举对象。

我无法从提供的代码中判断为什么它为零 - 没有提到 print_dimensions。但我的猜测是你在动作的某个地方初始化了这个变量,#new而不是在动作的“失败”部分#create。但这只是一个猜测。

于 2012-09-12T08:03:03.773 回答
0

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

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

于 2012-09-21T14:16:33.027 回答