嵌套的资源路由形式有很多 - 关联的自动链接
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
。
我看到一些关于嵌套资源形式的 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
。