Rails:控制器操作中的 elsif && 条件语句不起作用
Rails: elsif && conditional statement in controller action not working
我正在制作一个多步骤表单,该表单基于 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
目前控制器无法将最后两个 elsif 条件应用到 @order.payment = 'wiretransfer'
或 @order.payment = 'credit card'
。
所有其他条件都正常,但是当我通过信用卡部分结帐时,执行了电汇部分。
当我使用时:
elsif @order.last_step? && @order.payment == 'Wiretransfer'
...
elsif @order.last_step? && @order.payment = 'Credit card'
...
'Credit card' 有效,但 'wiretransfer' 无效。因为我在表单的最后一步显示了付款属性,所以我知道它在该步骤仍然存在,尽管它还没有保存到数据库中。
我做错了什么?我发现有时我必须使用 =
有时我必须使用 ==
,但我不清楚其中的合理性。
在视图中我必须使用 ==
(比较),例如:
<% elsif @order.last_step? && @order.payment == "Credit card" %>
触发正确的 div。
控制器中的两个条件
elsif @order.thirdlast_step? && params[:commit] == 'Wiretransfer'
elsif @order.thirdlast_step? && params[:commit] == 'Credit card'
仅适用于 ==
,而所有其他仅适用于 =
。我开始时只在控制器中使用 ==
,但是当我这样做时,什么都不会执行,并且会呈现新的。
提前致谢!
你应该在这两种情况下使用 ==
:
elsif @order.last_step? && @order.payment == 'Wiretransfer'
...
elsif @order.last_step? && @order.payment == 'Credit card'
...
=
为变量赋值,而 ==
检查两个 values/variables 是否相等。
作为 =
returns 一个赋值,在这两种情况下它不是零,它被评估为真实 - 这就是为什么当你有:
elsif @order.last_step? && @order.payment = 'Wiretransfer'
下一个 elsif
永远不会被调用。
值得一读:
我正在制作一个多步骤表单,该表单基于 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
目前控制器无法将最后两个 elsif 条件应用到 @order.payment = 'wiretransfer'
或 @order.payment = 'credit card'
。
所有其他条件都正常,但是当我通过信用卡部分结帐时,执行了电汇部分。
当我使用时:
elsif @order.last_step? && @order.payment == 'Wiretransfer'
...
elsif @order.last_step? && @order.payment = 'Credit card'
...
'Credit card' 有效,但 'wiretransfer' 无效。因为我在表单的最后一步显示了付款属性,所以我知道它在该步骤仍然存在,尽管它还没有保存到数据库中。
我做错了什么?我发现有时我必须使用 =
有时我必须使用 ==
,但我不清楚其中的合理性。
在视图中我必须使用 ==
(比较),例如:
<% elsif @order.last_step? && @order.payment == "Credit card" %>
触发正确的 div。
控制器中的两个条件
elsif @order.thirdlast_step? && params[:commit] == 'Wiretransfer'
elsif @order.thirdlast_step? && params[:commit] == 'Credit card'
仅适用于 ==
,而所有其他仅适用于 =
。我开始时只在控制器中使用 ==
,但是当我这样做时,什么都不会执行,并且会呈现新的。
提前致谢!
你应该在这两种情况下使用 ==
:
elsif @order.last_step? && @order.payment == 'Wiretransfer'
...
elsif @order.last_step? && @order.payment == 'Credit card'
...
=
为变量赋值,而 ==
检查两个 values/variables 是否相等。
作为 =
returns 一个赋值,在这两种情况下它不是零,它被评估为真实 - 这就是为什么当你有:
elsif @order.last_step? && @order.payment = 'Wiretransfer'
下一个 elsif
永远不会被调用。
值得一读: