0

Wickedを使用して Rails 4 アプリにウィザードを作成しました。私は特にこのガイドに従いました。唯一の違いは、ネストされたリソースでこれを行っていることです。ID を使用してフォームが作成しているオブジェクトを見つけるはずのコントローラー アクションに問題があります。

アプリの現在のフローは、ユーザーがボタンをクリックしてオブジェクトを作成し、一連のステップを通じてオブジェクトを更新するウィザードの最初のステップにリダイレクトされるというものです。問題は、ID フィールドでウィザードのステップを渡しているため、パラメーターを介してオブジェクトの ID を渡していないことです。

オブジェクトを作成するボタン

<%= link_to business_loan_application_path(@user), method: :post, :class => "btn btn-success" do %><% end
%>

LoanApplication コントローラ

    def create
      @user = current_user
      @loanapplication = @user.loan_applications.new
      @loanapplication.save(validate: false)
      redirect_to business_loan_application_wizard_path(@user.id,LoanApplication.form_steps.first)
    end  

:loan_application_id を何らかの形で business_loan_application_wizard_path 引数に渡す必要があります。

エラー

Couldn't find LoanApplication without an ID

LoanApplication は、has_many 関係を介して、belongs_to Business に属します。

{"business_id"=>"55", "id"=>"business_details"}

business_details は、ウィザードの最初のステップです。これらは、put リクエストでボタンを介して最初にオブジェクトを作成するときに渡されるパラメーターです。

ウィザード コントローラー

class WizardController < ApplicationController
  include Wicked::Wizard
  before_filter :authenticate_user!
  before_filter :require_business

  steps *LoanApplication.form_steps

  def show
    @business = current_user
    @loanapplication = LoanApplication.find(params[:loan_application_id])
    render_wizard
  end

  def update
    @business = current_user
    @loanapplication = @business.loan_applications.last
    @loanapplication.update_attributes(loan_application_params(step))
    render_wizard @loanapplication
  end
end
4

1 に答える 1

0

この質問の議論は、この問題の解決に役立ちました。

かわった

resources :wizard

scope "loan_application/:loan_application_id" do
  resources :wizard
end

私のroutes.rbファイルで。

私のウィザードコントローラーは次のようになりました:

def show
  @business = current_user
  @loanapplication = LoanApplication.find(params[:loan_application_id])
  render_wizard
end

def update
  @business = current_user
  @loanapplication = LoanApplication.find(params[:loan_application_id])
  @loanapplication.update_attributes(loan_application_params(step))
  render_wizard @loanapplication
end

最後に、ローン申請コントローラーのリダイレクト リンクが変更されました。

def create
  @user = current_user
  @loanapplication = @user.loan_applications.new
  @loanapplication.save(validate: false)
  redirect_to business_loan_application_wizard_path(@user.id, LoanApplication.form_steps.first, :loan_application_id => @loanapplication.id) 
end
于 2015-02-13T16:44:02.807 に答える