我正在处理一个多步骤表单,该表单基于Ryan Bates的#217 Multistep Forms教程。我需要在表单内部实施条件导航,事情变得非常复杂。
表单内的导航有效,但我的控制器中与提交有关的条件存在问题。
def create
@order.current_step = session[:order_step]
if @order.valid?
if params[:back_button]
@order.previous_step
elsif params[:back_button_wiretransfer]
@order.payment_options_step
elsif params[:back_button_credit_card]
@order.creditcard_options_step
elsif @order.thirdlast_step? && params[:commit] == 'Wiretransfer'
@order.payment = nil
@order.payment = 'Wiretransfer'
@order.confirmation_step
elsif @order.thirdlast_step? && params[:commit] == 'Credit card'
@order.next_step
elsif @order.secondlast_step?
@order.payment = nil
@order.payment = 'Credit card'
@order.next_step
elsif @order.last_step? && @order.payment = 'Wiretransfer'
...
elsif @order.last_step? && @order.payment = 'Credit card'
...
else
@order.next_step
end
session[:order_step] = @order.current_step
end
if @order.new_record?
render "new"
else
...
end
end
当前,控制器无法使用@order.payment = 'wiretransfer'
或@order.payment = 'credit card'
来应用最后两个elsif条件。
所有其他条件都正常,但是当我通过信用卡部分结帐时,将执行电汇部分。
当我使用时:
elsif @order.last_step? && @order.payment == 'Wiretransfer'
...
elsif @order.last_step? && @order.payment = 'Credit card'
...
“信用卡”有效,但“电汇”无效。因为我在表单的最后一步显示了付款属性,所以我知道它在那一步仍然存在,尽管还没有保存到数据库中。
我在做什么错?我发现有时候我不得不使用=
,而另一些时候则使用==
,但是我不清楚其合理性。
在视图中,我必须使用==
(用于比较),例如:
<% elsif @order.last_step? && @order.payment == "Credit card" %>
触发正确的div。
在控制器中有两个条件
elsif @order.thirdlast_step? && params[:commit] == 'Wiretransfer'
elsif @order.thirdlast_step? && params[:commit] == 'Credit card'
仅适用于==
,而其他所有仅适用于=
。我从仅在控制器中使用==
开始,但是当我这样做时,什么也没有执行,并且呈现了新内容。
提前谢谢!
答案 0 :(得分:4)
在两种情况下,您都应使用==
elsif @order.last_step? && @order.payment == 'Wiretransfer'
...
elsif @order.last_step? && @order.payment == 'Credit card'
...
=
为变量分配一个值,而==
检查两个值/变量是否相等。
由于=
返回一个分配的值,在这两种情况下它都不是nil,因此它被视为是事实-这就是为什么拥有以下条件的原因:
elsif @order.last_step? && @order.payment = 'Wiretransfer'
从不调用下一个elsif
。
值得一读: