2016-11-09 86 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 

現在,如果我從simple_form刪除@invoice_quote_element

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

的形式顯示就好了,但我不能提交,因爲create方法提出了一個新的錯誤:

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

回答

2

如果你不「T指定:url PARAM形式,Rails FormHelper將使用polymorphic_path來生成表單操作URL。欲瞭解更多信息,你可以訪問Here。由於路徑未定義,您會得到第一個錯誤。當您刪除@invoice_quote_element時,生成的路徑將爲brief_proposals_path,這可能是在您的路由文件中定義的,因此它可以工作。但是當你提交表單時,Rails將運行控制器proposals的方法create,這可能會導致錯誤。您應該檢查日誌以瞭解哪個控制器和操作被調用。在你的情況下,我認爲<%= 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是一個複數,而提案只附加了一個。 –

+0

「@ invoice_quote_element」爲零,所以invoice_quote_elements爲複數,因爲它在上面的鏈接中識別新記錄並映射到集合。您將資源更改爲'resources:invoice_quote_elements',它應該可以工作。 – phamhoaivu

+0

確實,它的工作!現在它引發了一個新的錯誤:沒有路由匹配{:action =>「index」,:controller =>「invoice_quote_elements」,:proposal_id => nil}缺少必需的鍵:[:proposal_id],這是很正常的,因爲我們建議#new''',因此建議還沒有id ... –