Я работаю над многоэтапной формой, основанной на учебнике # 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'
...
«Кредитная карта» работает, а «безналичный» - нет. Поскольку я показываю атрибут платежа на последнем шаге формы, я знаю, что он сохраняется на этом шаге, хотя он еще не был сохранен в базе данных.
Что я делаю не так? Я обнаружил, что иногда мне приходится использовать =
, а иногда ==
, но рациональное мне не понятно.
В представлении я должен использовать ==
(сравнение), например:
<% elsif @order.last_step? && @order.payment == "Credit card" %>
, чтобы вызвать правильные деления.
В контроллере два условия
elsif @order.thirdlast_step? && params[:commit] == 'Wiretransfer'
elsif @order.thirdlast_step? && params[:commit] == 'Credit card'
работает только с ==
, а все остальные только с =
. Я начал с использования только ==
в контроллере, но когда я это делал, ничего не выполнялось, а новое отображалось.
Заранее спасибо!