Ruby on rails 提交一个模型&x27;来自另一个模型的s形式';Rails应用程序中的s视图

Ruby on rails 提交一个模型&x27;来自另一个模型的s形式';Rails应用程序中的s视图,ruby-on-rails,forms,model-view-controller,ruby-on-rails-5,Ruby On Rails,Forms,Model View Controller,Ruby On Rails 5,我正在构建一个项目管理应用程序。 我的系统类似于项目->功能->任务。 一个项目有许多功能,一个功能有许多任务 class Project < ApplicationRecord belongs_to :user has_many :features validates :title, presence: true, length: { minimum: 4 } accepts_nested_attributes_for :features end class Featu

我正在构建一个项目管理应用程序。 我的系统类似于项目->功能->任务。 一个项目有许多功能,一个功能有许多任务

class Project < ApplicationRecord
  belongs_to :user
  has_many :features
  validates :title, presence: true, length: { minimum: 4 }
  accepts_nested_attributes_for :features
end

class Feature < ApplicationRecord
  belongs_to :project
  has_many :tasks
  accepts_nested_attributes_for :tasks
end
class Task < ApplicationRecord
  belongs_to :feature
end
\u feature.html.erb
表单如下所示

  <%= form_for(@project, class: "form-group row")  do |form| %>
    <%= form.fields_for :features do |builder| %>

      <%= builder.label :name %>
      <%= builder.text_field :name, required: true %>

      <%= builder.label :desc %>
      <%= builder.text_field :desc %>
      <%= builder.submit class: "btn btn-primary m-2" %>
    <% end %>
  <% end %>

但问题是,每当我呈现_feature.html.erb时,它都会给出一个编辑特征表单而不是一个新的特征表单,如何在project show页面中呈现新的特征创建表单?

您的代码似乎有很多潜在的错误。例如,这里:

def show
  @project = Project.find(params[:id])
  @project.features.build
end
…可能想变得更像:

def show
  @project = Project.find(params[:id])
  @feature = @project.features.build
end
<%= form_for [@project, @feature], class: "form-group row" do |form| %>
这是:

<%= form_for(@project, class: "form-group row")  do |form| %>
您可能会得到一个编辑表单,因为您正在将一条现有记录传递到您的
表单\u中,再次,这里:

<%= form_for(@project, class: "form-group row")  do |form| %>

最后,您没有展示任何关于如何处理对
新项目\功能\任务\路径的ajax调用的内容。大概,这会生成一个表单?您是否有
js
来显示表单(某种ajax上的
:success
或您有什么)?

非常感谢您的详细分析,我无法要求更多..实际上(最后一行我忘了删除)我想呈现一个表单taskform,它将用于将任务添加到各个功能,显示为没有路由匹配{:action=>“index”,:controller=>“tasks”,:feature\u id=>nil},缺少必需的键:[:feature\u id]什么是“it”(当您说“its showing…”)。在什么情况下?抛出的错误在哪里?我按照您所说的方法使用此表单头->
实现feature下的任务,并呈现此表单,将错误显示为项目中的
ActionController::UrlGenerationError#show
您是否试图在
@project.features内执行此操作。每个
循环?
<%= form_for [@project, @feature], class: "form-group row" do |form| %>
resources :projects do 
  resources :features, shallow: true do 
    resources :tasks, shallow: true 
  end
end
<%= form_for(@project, class: "form-group row")  do |form| %>
<%= link_to "new task", new_project_feature_task_path(@project,1), id: "newlink", remote: true %>
<div class="col-md-3 colm" id="card2">
  <div class="card">
    <div class="card-body">
      <a  href="#card2" class="close" data-dismiss="alert" aria-label="close">&times;</a>
      <h5 class="card-title">Backlog</h5>

      <div class="card-text">

      </div>
      <button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
          &plus; Add Feature
      </button>

      <div class="collapse" id="collapseExample">
        <%= render "feature" %>
      </div>

      <% @project.features.each do |feature| %>

        # render your feature details here

        <button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseTask" aria-expanded="false" aria-controls="collapseTask">
            &plus; Add Task
        </button>

        <div class="collapse" id="collapseTask">
          <%= link_to "new task", new_project_feature_task_path(@project, feature), id: "feature-#{feature.id}-new-task-link", remote: true %>
        </div>

      <% end %>

    </div>
  </div>
</div>