0

私は邪悪なフォームを初めて使用し、邪悪なフォームのレイルキャスト エピソードをフォローしていましたが、「'id'=info の会社が見つかりませんでした」というエラーが表示され続けます。したがって、問題は明らかにコントローラーのどこかにあることがわかります。私が頭を悩ませているのは非常に単純なことだとわかっているので、皆さんが大きな助けになることを知っています. これがコードです。すべての助けに感謝します!

企業のコード コントローラー:

def create
@company = Company.new(company_params)

respond_to do |format|
  if @company.save
    @object = @company.id
    format.html { redirect_to(company_steps_path(@company)) }
    format.json { render :show, status: :created, location: @company }
  else
    format.html { render :new }
    format.json { render json: @company.errors, status: :unprocessable_entity }
  end
end
  end

company_steps コントローラのコード:

class CompanyStepsController < ApplicationController


include Wicked::Wizard

  steps :info, :address, :quote

  def show
    @company = Company.find(params[:id])
    render_wizard
  end
  def update
    @company = Company.where(id: params[:id])
    @company.attributes = params[:company]
    render_wizard @company
  end
end
4

1 に答える 1

1

#find を使用してレコードが見つからない場合、ActiveRecord は ActiveRecord::RecordNotFound を発生させ、「id='somevalue' の会社が見つかりませんでした」などのメッセージを表示します。

あなたの id 列は整数型で、文字列を渡すと仮定します。

#show メソッドの params[:id] == 'info' で。

link_to、redirect_to、およびルートを確認してください。

ある時点で、この URL http://localhost:3000/company_steps/infoを生成します(おそらくビューで)。

GET "/company_steps/:id" company_steps#show に一致する GET 要求を実行します。

メソッド #show は、params[:id] == 'info' を使用してコントローラー CompanyStepsController で呼び出されます。

前に見たように、ActiveRecord は ID が「info」のレコードを見つけることができないため、ActiveRecord::RecordNotFound 例外が発生します。

エラーはコントローラーで発生しますが、問題はおそらくビューまたはリダイレクトにあります。ID が必要で、文字列を渡します。

編集:コメントで議論されているように

OK params[:id] == 'info' は wicked によって生成されます。id を使用してステップの流れを制御します。レールに params[:company_id] のようなものを生成させるには、ネストされたルートを使用する必要があります。

resources :companys do resources :steps, controller: 'companys/steps' end

したがって、rake ルートは次のようになります: /companies/:company_id/steps/:id

コントローラー内 params[:company_id] == 42 params[:id] == 'info'

https://github.com/schneems/wicked/wiki/Building-Partial-Objects-Step-by-Step

于 2016-01-13T22:36:15.897 に答える