【问题标题】: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=&gt;"index", 这是出乎意料的,显然我试图引用新操作以在功能下创建新任务(form_for [feature, feature.tasks.build]

【问题讨论】:

    标签: ruby-on-rails forms model ruby-on-rails-5 associations


    【解决方案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] ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多