2016-11-09 10 views
0

私はProposalモデルhas_one Quoteを持っています。simple_formでネストされたモデルのルート

私はsimple_formを使用して、両方のオブジェクトを同時に作成しています。 問題は、別の見積もりの​​クローンである見積もりを別のモデルBriefに所属させることです。私のコントローラでは、これは以下のようになります。私の見解では

def new 
    @proposal = Proposal.new 
    @brief = Brief.find(params[:brief_id]) 
    @proposal.brief = @brief 
    @invoice_quote_element = @brief.invoice_quote_element.deep_clone include: [ :expense_categories, { expense_categories: :expenses } ] 
end 

、私は

<%= simple_form_for [@proposal.brief, @proposal, @invoice_quote_element] do |f| %> 

でフォームを追加しかし、これは動作しません、と私は次のエラー取得しています:

undefined method `brief_proposal_invoice_quote_elements_path' 

私のルートは、私にはきれいに見える:

resources :proposals do 
    resources :invoice_quote_element 
    member do 
     get 'edit_legal' 
     patch 'update_legal' 
     get 'quote' 
     get 'view_quote' 
     get 'download_quote' 
    end 
    end 

今、create方法は、新しいエラー発生させますので、私はフォームが表示されますが、うまくsimple_formから

<%= simple_form_for [@proposal.brief, @proposal] do |f| %> 

を@invoice_quote_elementを削除し、私はそれを提出できない場合:あなたドン場合

Couldn't find InvoiceQuoteElement with ID=299 for Proposal with ID= 

答えて

2

をフォームに:urlパラメータを指定すると、Rails FormHelperpolymorphic_pathを使用してフォームアクションURLを生成します。詳細はHereをご覧ください。パスが定義されていないため、最初のエラーが発生します。 @invoice_quote_elementを削除すると、生成されたパスはbrief_proposals_pathになります。ルートファイルに定義されている可能性があります。しかし、あなたがフォームを提出したときに、Railsはコントローラのコントローラーproposalsを実行します。これはエラーを引き起こす可能性があります。どのコントローラーとアクションが呼び出されたかを知るには、ログをチェックする必要があります。あなたの場合、私は<%= simple_form_for [@proposal, @invoice_quote_element] do |f| %>がうまくいくと思う。

+0

まあ、何らかの理由で、そうではありません。私はそれを考え、私のルートに一致するリソースを追加しましたが、<%= simple_form_for [@proposal、@invoice_quote_element]にすると、do | f | %>、私はこれを得ます:未定義のメソッド 'proposal_invoice_quote_elements_path '。 invoice_quote_elementsが複数の理由は分かりませんが、プロポーザルには1つしか付いていません。 –

+0

'@ invoice_quote_element'はnilなので、invoice_quote_elementsは複数のものです。これは上記のリンクの'新しいレコードを認識し、コレクションにマップする 'ようです。リソースを 'resources:invoice_quote_elements'に変更すると動作します。 – phamhoaivu

+0

確かに、それは働いた! {:action => "index"、:controller => "invoice_quote_elements"、:proposal_id => nil}必要なキーがありません:[:proposal_id]、新しいエラーが発生しました。プロポーザル#new'''にあるので、プロポーザルにはまだIDがありません。 –

関連する問題