繁体   English   中英

具有simple_form的嵌套模型的路由

[英]route for nested model with simple_form

我有一个Proposal模型,它具有has_one 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=

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM