Javascript 如何自动验证优惠券并调整价格?
我正在尝试将优惠券添加到我的结账页面,使用一个AJAX请求验证优惠券并相应地更新价格。但是,在加载checkout视图时,我会收到错误消息: 表单中的第一个参数不能包含nil或为空 参考行Javascript 如何自动验证优惠券并调整价格?,javascript,ruby-on-rails,ruby,ajax,ruby-on-rails-4,Javascript,Ruby On Rails,Ruby,Ajax,Ruby On Rails 4,我正在尝试将优惠券添加到我的结账页面,使用一个AJAX请求验证优惠券并相应地更新价格。但是,在加载checkout视图时,我会收到错误消息: 表单中的第一个参数不能包含nil或为空 参考行将表单更改为: <%= form_for @actioncode, method: :post, url: {action: "check_actioncode", :controller => 'actioncodes'}, remote: true do |f| %> <%= f
将表单更改为:
<%= form_for @actioncode, method: :post, url: {action: "check_actioncode", :controller => 'actioncodes'}, remote: true do |f| %>
<%= f.text_field :actioncode, :placeholder => "Enter your coupon" %>
您是否尝试过
谢谢,尝试过,然后在加载时收到不同的错误消息:表单中的第一个参数不能包含nil或是空的
引用同一行。好的,这就是进度,用相关错误消息更新您的问题,以便我们可以查看并进一步帮助您我更新了原始帖子。不确定“在表单的html呈现中粘贴”是什么意思。表单直接包含在视图文件中(因此不是部分)。好的,谢谢,我按照指示做了,但得到了错误消息:表单中的第一个参数不能包含nil或为空
,它指的是@actioncode…
行的表单。actioncode和优惠券代码之间有区别。有一个操作码模型,只有管理员向其写入数据。此模型包含用户在支付帐户时可能使用的所有操作代码。优惠券代码是指用户在结账时输入的值。这样做的目的是检查actioncodes模型中是否存在优惠券代码。如果是:应用与正确的actioncode记录对应的条件。与actioncodes模型一样,用户模型也有一个名为“actioncode”的列。我的想法是在签出后将使用过的操作代码的id写入最后一列。在我尝试的所有测试中,我意外地注释掉了控制器中的一行。正在更正此错误,新的错误消息是:没有路由匹配{:action=>“check_actioncode”,:controller=>“organizations”}
。但正如你在原始帖子中看到的,路线是有定义的。不,没有定义。check\u actioncode
方法在actioncode
控制器中,而不是在组织
控制器中。我看不出有任何理由使用优惠券代码
属性。
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
<%= 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