私は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=
まあ、何らかの理由で、そうではありません。私はそれを考え、私のルートに一致するリソースを追加しましたが、<%= simple_form_for [@proposal、@invoice_quote_element]にすると、do | f | %>、私はこれを得ます:未定義のメソッド 'proposal_invoice_quote_elements_path '。 invoice_quote_elementsが複数の理由は分かりませんが、プロポーザルには1つしか付いていません。 –
'@ invoice_quote_element'はnilなので、invoice_quote_elementsは複数のものです。これは上記のリンクの'新しいレコードを認識し、コレクションにマップする 'ようです。リソースを 'resources:invoice_quote_elements'に変更すると動作します。 – phamhoaivu
確かに、それは働いた! {:action => "index"、:controller => "invoice_quote_elements"、:proposal_id => nil}必要なキーがありません:[:proposal_id]、新しいエラーが発生しました。プロポーザル#new'''にあるので、プロポーザルにはまだIDがありません。 –