Ruby on rails 具有多个自动关联链接的嵌套资源路由表单

Ruby on rails 具有多个自动关联链接的嵌套资源路由表单,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我看到了一些关于嵌套资源表单的帖子,但没有一篇概述如何自动使嵌套资源使用关联的父级。当我发布表单时,它会触发状态验证错误项目不能为空 我的项目有很多估算,其中有很多行项目 现在让我们假设我正在创建一个表单,用于在 /project/:project_id/estimates/new 此表单具有多行项目关系。还要注意,estimates是“我的路线”项目下的嵌套资源 <%= form_for([@project, @estimate], html: {class: "form"}) do

我看到了一些关于嵌套资源表单的帖子,但没有一篇概述如何自动使嵌套资源使用关联的父级。当我发布表单时,它会触发状态验证错误项目不能为空

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

现在让我们假设我正在创建一个表单,用于在

/project/:project_id/estimates/new
此表单具有多行项目关系。还要注意,estimates是“我的路线”项目下的嵌套资源

<%= form_for([@project, @estimate], html: {class: "form"}) do |f| %>
...
    <%= f.fields_for :estimate_line_items do |estimate_line_item| %>
...
我不想发布视图的代码,因为它有很多额外的元素和结构。值得注意的是,我没有任何ID的输入,我想知道这是否是必需的,请参阅问题

我的问题是:

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


2 rails是否自动链接相关元素和ID,或者我们是否需要使用ID进行隐藏输入?

默认情况下,因为rails 5属于关系是必需的。这意味着在保存时必须设置该值。对于嵌套项,这意味着您有两个选项,要么将“所属”设置为可选,要么明确声明哪些关系彼此相反,这样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\u id不会插入表单中:您必须自己执行此操作,因此不要忘记在表单中添加一个f.hidden\u字段:project\u id,value:@project.id

您是否在您的模型上为:估算行项目设置了accept_nested_attributes_,并允许使用正确的参数?对于大多数常见的用例,它应该通过正确的配置和视图帮助程序的正确使用来处理所有关系,但是您没有提供太多的指导。您已经看过官方的Rails了吗?这很好-正是我想要的。如果你能详细说明并使你的答案更全面,我认为它值得投赞成票并打勾。我已经发现,字段不需要ID,Rails约定将自动使用父模型的ID。正如您所指定的,父模型必须有一个具有自己父ID的隐藏输入。最终,视图所需的代码就是我在您有嵌套路由且有许多嵌套字段时所寻找的代码。有点不清楚我是否确实帮助您解决了问题,如果是,需要详细说明什么?我可以给你们指出我写的关于制作嵌套表单和详细演示项目的一般页面,用于cocoon,但底线仍然是你们的案例是特殊的,因为你们有一个嵌套表单,在嵌套路径上,在这种情况下,您必须手动添加父id项目id-您上面的评论令人困惑,因为您使用了两次父id,但我想我理解了。更通用的RubyonRails指南非常完整,可能更适合