我正在尝试使用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_cardvalidate :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;
如果您有任何建议,请与我们联系。谢谢
答案 0 :(得分:0)
您收到此错误是因为@print_dimensions
为nil
且collection_select
代码的一部分是它在您应该传递到的可枚举对象上调用map
我不知道为什么它从提供的代码中没有 - 没有提到print_dimensions。但我的猜测是,您在#new
操作中的某个位置初始化此变量,而不是#create
操作的“失败”部分。但这只是猜测。
答案 1 :(得分:0)
我的问题是由于我的collection_select数据为零。基本上当我尝试执行一个新操作并且它失败时,它会被传递给Create,它尝试重新渲染New页面,但不再有collection_select数据。
以下是与我的答案相似的链接 - link