嵌套的资源路由形式有很多 - 关联的自动链接

Nested Resource Route Forms With Has Many - Automatic Linking of Associations

我看到一些关于嵌套资源形式的 post,但是 none 概述了应该如何自动使嵌套资源使用父级进行关联。当我 post 我的表单时,它会触发存在验证错误 "Project Can't be blank"

我的项目有很多估算,其中有很多行项目。

现在假设我在

创建一个估算表
/project/:project_id/estimates/new

此表单中有许多订单项关系。另请注意,估计是我路由项目下的嵌套资源。

<%= form_for([@project, @estimate], html: {class: "form"}) do |f| %>
...
    <%= f.fields_for :estimate_line_items do |estimate_line_item| %>
...

我不想 post 视图的代码,因为它有很多额外的元素和结构。值得注意的是,我在任何地方都没有输入任何 ID(想知道是否需要,请参阅问题)。

我的问题:

1) 如何在视图代码中创建表单?

2) rails 是否会自动 link 关联元素和 ID,或者我们是否需要使用 ID 进行隐藏输入?

默认情况下,由于 rails 5,需要 belongs_to 关系。这意味着必须在保存时设置该值。对于嵌套项目,这意味着您有两个选择,要么使 belongs_to 可选,要么明确声明哪些关系彼此相反,因此 rails 可以推断满足要求 在保存之前 !

所以在你的情况下我猜是

class Project 
  has_many :estimates, inverse_of: :project 

class Estimate 
  belongs_to :project 
  has_many :estimate_line_items, inverse_of: :estimate  

class EstimateLineItem 
  belongs_to :estimate 

此外,您的情况有点特殊,因为您在嵌套路由上有一个嵌套表单。嵌套表单神奇地自动处理所有 id,但是路由中的 @project_id 不会插入表单中:您必须自己做,所以不要忘记在表单中添加 f.hidden_field :project_id, value: @project.id