ruby-on-rails - 导轨中的三重嵌套模型形式显示错误
问题描述
我正在实现三重嵌套表单,您可以在其中看到我还显示了三重嵌套任务模型的内容,并呈现了一个表单以添加新任务。任务列表显示正确 - 这意味着 fet 具有有效的特征模型,但不知道为什么它在意外渲染新任务表单时失败!它显示的位置->
项目中的 ActionController::UrlGenerationError#show
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
请帮助我找出在显示和创建新的 .
注意:我刚刚注意到在错误消息中 - 它说 No route matches {:action=>"index",
这是意外的,显然我试图引用在 Feature( form_for [feature, feature.tasks.build]
)下创建新任务的新操作
解决方案
form_for [feature, feature.tasks.build]
抱怨缺少feature_id
值,因为您的路线定义嵌套在项目中,并且您没有传递项目。
根据您的路线定义,您的路线应该是 something projects/:project_id/features/:feature_id/tasks
。您需要提供两个 ID。
form_for [feature, feature.tasks.build]
正在使用feature.id
as:project_id
和新的 taks 对象的 id(nil,因为它没有保存)作为:feature_id
您路线的值。
要解决此问题,请将嵌套一分为二:
resources :projects do
resources :features
end
resources :features do
resources :tasks
end
(rails 指南不鼓励多级嵌套。
如果您仍想使用 3 级嵌套,则将项目传递给 form_for 助手:
form_for [@project, feature, feature.tasks.build] ...
推荐阅读
- excel - 在 Excel 中更新多个图表
- ios - 客户端应用程序错误 - UITargetedPreview 的视图或容器当前都不在窗口中
- powershell - Powershell删除包含多个文本文件的文件夹中的重复行
- javascript - 为什么这个被注释掉的函数不能达到与它下面的 if 语句相同的结果?我怎样才能让它发挥作用?
- c++ - 当您首先将名称存储在变量中时,您如何命名一个类?
- c# - 使用 IEnumerator 和使用数组作为属性之间的区别
- r - 使用 ggplot2 通过 Map 绘制密度图
- ruby-on-rails - 每当 Rails 中用于 cron 的 gem 无法在 Mac 中运行并且找不到日志时
- python - 如何评估具有可变内积分上限的双积分
- node.js - 猫鼬模型限制