使用simple_form的嵌套模型的路由

时间:2016-11-09 16:07:03

标签: ruby-on-rails nested simple-form

我有一个Proposal模型,其中包含Quote

我正在使用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=

1 个答案:

答案 0 :(得分:2)

如果您未在表单中指定polymorphic_path参数,@invoice_quote_element将使用brief_proposals_path生成表单操作网址。有关详细信息,请访问Here。您收到第一个错误,因为未定义路径。当您删除create时,生成的路径将为proposals,这可能在您的路径文件中定义,因此它可以正常工作。但是当您提交表单时,Rails将运行控制器<%= simple_form_for [@proposal, @invoice_quote_element] do |f| %>的方法{{1}},这可能会导致错误。您应该检查日志以了解调用哪个控制器和操作。在您的情况下,我认为{{1}}应该有效。