【发布时间】:2015-05-09 13:00:17
【问题描述】:
我正在尝试将优惠券添加到我的结帐页面,使用 AJAX 请求来验证优惠券并相应地更新价格。但是,在加载结帐视图时,我收到 错误消息:
表单中的第一个参数不能包含 nil 或为空
参考表格中输入优惠券的<%= form_for @actioncode, method: :post ...行。我尝试按照here 的步骤进行操作。我应该如何调整我的代码?
设置: @actioncode 是指管理员存储操作代码的模型。 Coupon_code 不包含在任何模型中,而是指用户在表单中输入的值。如果值存在(验证),则应根据 Actioncode 模型(特别是“actioncode”列)检查 Coupon_code,如果存在,则根据“折扣”列中 Actioncode 模型中的值更新价格。
结帐视图包含以下表单:
<%= 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'
在 actioncodes 控制器我有:
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 确实是一个未定义的变量,但它应该只是用户输入的临时值,并根据模型中的操作代码进行检查以进行验证。我该怎么做?
【问题讨论】:
-
你试过
<%= form_for @actioncode, url: {action: "check_actioncode"}, remote: true do |f| %> -
谢谢,试过了,然后在加载时收到不同的错误消息:
First argument in form cannot contain nil or be empty指的是同一行。 -
好的,这就是进展,用相关的错误消息更新您的问题,以便我们查看并进一步帮助您
-
我更新了原帖。不确定“粘贴到 form_for 的 html 渲染中”是什么意思。表单直接包含在视图文件中(所以不是部分的)。
-
好的,那
<%= form_for @actioncode, method: :post, url: {action: "check_actioncode"} ...呢
标签: javascript ruby-on-rails ruby ajax ruby-on-rails-4