Ruby on rails 当我已经设置了URL时,为什么我的嵌套资源表单试图使用不存在的路径方法?

Ruby on rails 当我已经设置了URL时,为什么我的嵌套资源表单试图使用不存在的路径方法?,ruby-on-rails,forms,erb,nested-resources,Ruby On Rails,Forms,Erb,Nested Resources,我在应用程序中定义了以下路由: resources :users do resources :data_sets end 可通过以下链接访问表单数据集/新建: <%= link_to "New Data Set", new_user_data_set_path(user) %> 这里发布的类似问题似乎表明,定义URL通常可以解决嵌套资源表单的问题,但正如您所看到的,我已经做到了。这里还发生了什么?帮助程序根据您传递的数组构建嵌套url。但在新记录的情况下,@data\u se

我在应用程序中定义了以下路由:

resources :users do
  resources :data_sets
end
可通过以下链接访问表单数据集/新建:

<%= link_to "New Data Set", new_user_data_set_path(user) %>
这里发布的类似问题似乎表明,定义URL通常可以解决嵌套资源表单的问题,但正如您所看到的,我已经做到了。这里还发生了什么?

帮助程序根据您传递的数组构建嵌套url。但在新记录的情况下,@data\u set.author返回nil,表单尝试到达不存在的data\u set\u路径

如果您的表单仅用于新操作,您可以编写:

<%= form_with model: @data_set, url: [:user, @data_set] do |form| %>
如果在“新建”和“编辑”之间共享表单,则可以编写如下条件:

<%= form_with model: @data_set, url: [(@data_set.new_record? ? :user : @data_set.author), @data_set] do |form| %>

您确定data_set.author有值吗?也许这就是为什么它只寻找@data_集的路径,而不是嵌套的路径。因为语法似乎正确
{ "user_id" => "1" }
<%= form_with model: @data_set, url: [:user, @data_set] do |form| %>
<%= form_with model: @data_set, url: [(@data_set.new_record? ? :user : @data_set.author), @data_set] do |form| %>