2017-03-27 2 views
0

나는 이것으로 하루 종일 원을 돌았습니다. Wicked gem과 Ruby on Rails를 사용하여 대규모 다단계 양식을 작성했습니다. 그것은 완벽하게 작동하지만 개별 입력을 편집하기 위해 양식으로 돌아갈 방법을 알아낼 수는 없습니다.저장 후 마법사 다단계 양식 편집 - Wicked Gem/Rails

클라이언트 쇼 페이지로 들어가기 위해 개별 클라이언트를 클릭 한 다음 견적으로 돌아가 편집하고 업데이트하십시오. Wicked gem이 표시 및 업데이트 작업에서만 작동하는 것으로 보입니다. 따라서 Wicked가 단계에서 수행 할 것으로 기대하는 표준 편집 작업을 만들려고하면 작동하지 않습니다. 편집 작업을 내 쇼/업데이트 작업에 반영해야하지만 어려움을 겪고 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다!

클라이언트 컨트롤러 :

class ClientsController < ApplicationController 
before_action :authenticate_user!, only: [:index, :show, :edit] 
before_action :set_client, only: [:edit, :show, :update] 

def index 
    @clients = Client.order('created_at DESC').paginate(page: params[:page], per_page: 10) 
end 

def show; end 

def new 
    @client = Client.new 
end 

def edit; end 

def update 
    if @client.update_attributes(client_params) 
     redirect_to client_quotes_path 
     flash[:success] = 'Client successfully updated' 
    else 
     render 'edit' 
    end 
    render_wizard @client 
end 

# After client is completed: 
def create 
    @client = Client.new(client_params) 
    if @client.valid? 
     @client.save 
     session[:current_user_id] = @client.id 
     ClientMailer.new_client(@client).deliver 
     redirect_to quotes_path 
    else 
     flash[:alert] = 'Sorry, there was a problem with your message. Please contact us directly at ...' 
     render :new 
    end 
end 

private 

def set_client 
    @client = Client.find(params[:id]) 
end 

def client_params 
    params.require(:client).permit(:first_name, :last_name, :title, :email, :email_confirmation, 
            :phone, :time, :reminder, :ref_number, :day, :note, :logs_reminder) 
end 
end 

인용 컨트롤러 :

class QuotesController < ApplicationController 
include Wicked::Wizard 
before_action :set_client, only: [:show, :update, :quote_success] 
steps :profile, :employment, :general_questions, :indemnity_details, :declarations 

def show 
    @client.build_doctor unless @client.doctor.present? 
    @client.build_dentist unless @client.dentist.present? 
    @client.old_insurers.build 
    @client.practice_addresses.build 
    render_wizard 
end 

def update 
    @client.update(client_params) 
    render_wizard @client 
end 

def quote_success; end 

private 

def set_client 
    current_user = Client.find_by_id(session[:current_user_id]) 
    @client = current_user 
end 

# After full quote form is completed: 
def finish_wizard_path 
    if @client.valid? 
     ClientMailer.new_quote(@client).deliver 
     ClientMailer.new_quote_user_message(@client).deliver 
     end 
     quote_success_path 
    end 
end 

def client_params 
    params.require(:client).permit(:name, :email, :email_confirmation, :phone, :date_required, 
            :title, :first_name, :last_name, :date_of_birth, :nationality, :reg_body, :reg_date, :reg_type, :reg_number, 
            :qual_place, :qual_year, :post_grad, :membership ... 

경로 :

결국이 내 솔루션이었다보다는 멀티로 편집 양식을
Rails.application.routes.draw do 

devise_for :users 

root 'clients#new' 

get 'client', to: 'clients#new', as: 'client' 
post 'client', to: 'clients#create' 

get '/client_quotes', to: 'clients#index', as: 'client_quotes' 
get '/client_quotes/:id', to: 'clients#show', as: 'client_quote' 
get '/client_quotes/:id/edit', to: 'clients#edit', as: 'edit_client_quote' 
patch '/client_quotes/:id', to: 'clients#update' 
put '/client_quotes/:id', to: 'clients#update' 

resources :quotes, only: [:index, :show, :update, :quote_success] 

get 'quote-success' => 'quotes#quote_success' 

devise_scope :user do 
    get '/login' => 'devise/sessions#new' 
end 
end 
+0

wicked wizard에 대한 별도의 라우팅과 지속 된 값에 대한보다 일반적인 라우팅을 고려해 보셨습니까? –

+0

그게 실제로 내가 다 끝냈어, 다단계 마법사로 편집 양식을 가지고 있기보다는 양식 데이터에 함께 합류하고 언급 한대로 전통적인 경로를 가졌습니다. 완벽하지는 않지만 일을합니다! – DanRio

답변

0

단계별 마법사를 사용하여 양식 데이터를 별도의보기 페이지에 결합하고 당신은 언급합니다. 완벽하지는 않지만 일을합니다!

0

업데이트 할 때 요소를 "편집하는"것과 같으므로 편집 할 때 마법사로 리디렉션하고 업데이트 메서드를 호출 할 때 실제로 해당 항목을 편집 할 필요가 있습니다. 그러므로 사악한 길을 부르십시오.