导轨中的三重嵌套模型形式显示错误
Posted
技术标签:
【中文标题】导轨中的三重嵌套模型形式显示错误【英文标题】:Triply nested model's form in rails showing error 【发布时间】:2019-08-16 15:37:22 【问题描述】:我正在实现三重嵌套表单,您可以在其中看到我还显示了三重嵌套任务模型的内容,并且还呈现了一个表单以添加新任务。 任务列表显示正确 - 这意味着 fet 具有有效的特征模型,但不知道为什么它在意外渲染新任务表单时失败! 它显示在哪里->
Projects#show 中的 ActionController::UrlGenerationError
No route matches :action=>"index", :controller=>"tasks", :feature_id=>nil, missing required keys: [:feature_id]
<% @project.features.each do |fet| %>
<div class="card p-2">
<%= "#fet.name #fet.id" %>
<!-- new Taskform loading is showing problem -->
<%= render :partial => "taskform", :locals => :feature => fet %>
<!-- this one is displaying task list properly -->
<div class="card-body">
Tasks:
<% fet.tasks.each do |t| %>
<%= "#t.name" %>
<%= "#t.completed" %>
<%= "#t.user_id" %>
<% end %>
</div>
</div>
<% end %>
我的_taskform.html.erb
标头看起来像->
<%= form_for [feature, feature.tasks.build], method: :post, class: "form-group row" do |builder| %>
(我猜其余部分无关紧要,所以我没有包括)
现在 routes.rb 是,
resources :projects do
resources :features, shallow: true do
resources :tasks
end
end
请帮助我找出在显示和创建新的时行为模棱两可的可能原因。
N.B:我刚刚注意到在错误消息中 - 它说 No route matches :action=>"index",
这是出乎意料的,显然我试图引用新操作以在功能下创建新任务(form_for [feature, feature.tasks.build]
)
【问题讨论】:
【参考方案1】:form_for [feature, feature.tasks.build]
抱怨缺少 feature_id
值,因为您的路由定义嵌套在项目中,并且您没有传递项目。
根据您的路线定义,您的路线应该是projects/:project_id/features/:feature_id/tasks
。您需要提供两个 ID。
要解决这个问题,请将嵌套一分为二:
resources :projects do
resources :features
end
resources :features do
resources :tasks
end
(rails 指南不鼓励多层嵌套。
如果你还想使用 3 级嵌套,那么将项目传递给 form_for 助手:
form_for [@project, feature, feature.tasks.build] ...
【讨论】:
以上是关于导轨中的三重嵌套模型形式显示错误的主要内容,如果未能解决你的问题,请参考以下文章