2016-11-14 2 views
0

У меня есть приложение Rails 4 App Order Model, где пользователь заполняет форму для необходимых данных для расчета цен и т. Д. Я хочу, чтобы они вам предлагается выполнить вход (с драгоценным камнем DEVISE) в конце шага_3 и перенаправляться в раздел оплаты, но они могут хранить свои данные формы из модели заказа, которую пользователь предварительно заполнил, эти данные являются данными формы заказа, прежде чем они подписанного вКак заставить пользователя войти в систему после заполнения формы, сохраняя данные формы с помощью рельсов

Основные вопросы:.

  1. Перенаправление их после знака в середине пути через процесс, используя изобрести

  2. Сохранение данных формы и связывая его с текущим пользователем непосредственно перед маршрутизируется в раздел оплаты

  3. секция Order.find_by. Что я могу найти?

фона: Rails 4 PostgreSQL Разрабатывают Gem

class OrdersController < ApplicationController 
before_action :authenticate_user!, :except => [:step_1,:process_step1,:step_2a,:process_step_2a, :step_2b, :step_2c, :step_3] 

def step_1 
    @order = Order.find_by id: session[:order_id] 
    if @order.nil? 
    @order=Order.new 
    @order.save! 
    end 
end 

def process_step1 
order = Order.find_by id: session[:order_id] 
order.update_attributes(order_params) 
if (order.building == 'Residential') || (order.building == 'Commercial') 
    redirect_to step_2a_path 
elsif (order.building == 'Commercial + Parking') || (order.building == 'Residential + Parking') 
    redirect_to step_2b_path 
else 
    redirect_to step_2c_path 
    end 
end 

    def step_2a 
    @order = Order.find_by id: params[:session_id] 
end 

    def process_step_2a 
    order= Order.find_by status: 'cart' 
# , user_id: current_user.id 
order.update_attributes(order_params) 
if order.save 
    redirect_to step_3_path 
    end 
    end 

    def step_2b 
    @order= Order.find_by status:'cart' 
# , user_id: current_user.id 
    end 

    def process_step_2b 
    order= Order.find_by status: 'cart' 
# , user_id: current_user.id 
order.update_attributes(order_params) 
if order.save 
    redirect_to step_3_path 
end 
end 

    def step_2c 
    @order= Order.find_by status:'cart' 
    # , user_id: current_user.id 
    end 

    def process_step_2c 
    order= Order.find_by status: 'cart' 
    order.update_attributes(order_params) 
    if order.save 
    redirect_to step_3_path 
end 
    end 

    def step_3 
    @order= Order.find_by status:'cart' 
# , user_id: current_user.id 
    end 

def process_step_3 
    order= Order.find_by status: 'cart', user_id: current_user.id 
    order.update_attributes(order_params) 
    if order.save 
    redirect_to payment_path 
end 
end 

def payment 
    @order= Order.find_by status:'cart', user_id: current_user.id 
end 

ответ

0

Во-первых, вы должны действительно реорганизовать вам маршруты. С этой структурой ваше приложение будет экспоненциально более запутанным, чтобы перемещаться по большему, чем оно растет, и сделает практически невозможным для кого-либо еще работать над ним/помочь вам с отладкой. Взгляните на это руководство по телефону RESTful routing, чтобы узнать больше.

Как для вас вопрос, вы можете хранить свои данные формы в одном из рельсов временные механизмы хранения (я рекомендую session variable), пока они входа в систему, то оно появилось вновь после того, как они закончат

0
  1. Там является обратным вызовом after_sign_in_path_for, вы можете добавить его в свой ApplicationController. Используется here

2,3. Продолжайте использовать сеанс [: order_id]. Не могу понять, почему вы используете find_by status: «cart» и Order.find_by id: params [: session_id]. Проверить this url для сохранения старой сессии после входа.

Лично я не рекомендую этот метод, и я думаю, что лучше привязать идентификатор заказа к некоторому безопасному случайному сгенерированному значению, хранящемуся в cookie.

Смежные вопросы