我尝试将优惠券添加到我的结帐页面,使用验证优惠券的AJAX请求并相应地更新价格。但是,在加载结帐视图时,我收到错误消息:
表单中的第一个参数不能包含nil或为空
在输入优惠券的表格中引用行<%= form_for @actioncode, method: :post ...
。我试图按照here的步骤进行操作。我应该如何调整我的代码?
设置: @actioncode是指管理员存储操作码的模型。 Coupon_code不包含在任何模型中,但是指用户在表单中输入的值。如果值存在(验证),则应根据Actioncode模型(特别是&#39; actioncode&#39;列)检查Coupon_code,如果是,则根据colum&quot;折扣中的Actioncode模型中的值更新价格#39;
结帐视图包含以下格式:
<%= form_for @actioncode, method: :post, url: {action: "check_actioncode"}, remote: true do |f| %>
<%= f.text_field :coupon_code, :placeholder => "Enter your coupon" %>
<%= f.submit "Submit Coupon Code" %>
<% end %>
路线:
post 'check_actioncode' => 'actioncodes#check_actioncode'
在动作码控制器中,我有:
def check_actioncode
@actioncode = Actioncode.find(params[:coupon_code])
respond_to do |format|
if !@actioncode.nil?
format.js {}
else
flash.now[:success] = "Action code not found or expired"
end
end
end
组织控制器呈现结帐视图:
def checkout
@organization = Organization.new(organizationnew_params)
if @organization.save
@organization.members.each do |single_member|
single_member.send_activation_email
end
@actioncode = Actioncode.new
@amount = 100.00
@currency = "EUR"
@description = @organization.id
@transaction_description = "My description"
@transaction_type = "S"
@hash = hash(@description, @amount, @currency, @transaction_type)
render 'checkout' # This renders the checkout view.
else
render 'new_premium'
end
end
更新:如果我将@actioncode = Actioncode.new
添加到加载视图的控制器,我会收到另一条错误消息undefined method 'coupon_code'
,指的是表单的第二行。 coupon_code
确实是一个未定义的变量,但它应该只是一个用户输入的临时值,并根据模型中的动作代码进行检查以进行验证。我该怎么做?
答案 0 :(得分:1)
将表单更改为:
<%= form_for @actioncode, method: :post, url: {action: "check_actioncode", :controller => 'actioncodes'}, remote: true do |f| %>
<%= f.text_field :actioncode, :placeholder => "Enter your coupon" %>
将您的控制器更改为:
def check_actioncode
@actioncode = Actioncode.where(:actioncode => params[:actioncode][:actioncode]).first
respond_to do |format|
unless @actioncode.blank?
format.js {}
else
flash.now[:success] = "Action code not found or expired"
end
end
end