Ruby on rails 不能';找不到带有';id';=尝试从项目配置文件创建任务时

Ruby on rails 不能';找不到带有';id';=尝试从项目配置文件创建任务时,ruby-on-rails,ruby-on-rails-4,has-many-through,strong-parameters,Ruby On Rails,Ruby On Rails 4,Has Many Through,Strong Parameters,我有一个项目模型和一个任务模型,但是一个任务可以有很多项目,反之亦然……所以我在两者之间创建了一个关系模型。现在,从项目概要文件中,我希望能够创建一个任务,并自动让它创建任务以及新任务与创建它的项目之间的关系 但是,当我尝试完成此操作时,我会遇到以下错误: ActiveRecord::RecordNotFound in TasksController#create Couldn't find Project with 'id'= 用户在项目显示页面上,单击“提交新任务”链接。我意识到我没有以某

我有一个项目模型和一个任务模型,但是一个任务可以有很多项目,反之亦然……所以我在两者之间创建了一个关系模型。现在,从项目概要文件中,我希望能够创建一个任务,并自动让它创建任务以及新任务与创建它的项目之间的关系

但是,当我尝试完成此操作时,我会遇到以下错误:

ActiveRecord::RecordNotFound in TasksController#create
Couldn't find Project with 'id'=
用户在项目显示页面上,单击“提交新任务”链接。我意识到我没有以某种方式传递项目ID,但我似乎不知道如何传递,因为我使用了TaskRelationship模型来关联任务和项目(我没有将任务嵌套在我的路径中的项目中)

视图/项目/show.html.erb:

<%= link_to "+ Submit New Task", new_task_path, :class => "btn btn-info col-md-12" %>
<div class="container sign-in-register">
    <div class="authform">

           <%= form_for @task, :html => {:multipart => true} do |f| %>

          <h3>Submit new task to this project...</h3><br/>

            <%= render 'shared/error_messages', object: f.object %>

            <%= f.label :Title %>
            <%= f.text_field :title, class: 'form-control' %>

            <%= f.label :Description %>
            <%= f.text_area :description, class: 'form-control' %>

            <br clear="all">

            <%= f.submit "Add this Task", class: "btn btn btn-info" %>
          <% end %>

    </div>
</div>

在控制器语句
Project.find(params[:taskproject\u id])
中,看起来
params[:taskproject\u id]
为零。查看表单视图中的代码,传递给控制器的参数应该是
params[:id]
。还不清楚在哪里定义了
task_params


如果仍然出现错误,请在提交表单时检查日志输出中的参数并将其发布到此处。

在控制器语句
Project.find(params[:taskproject\u id])
中,看起来
参数[:taskproject\u id]
为零。查看表单视图中的代码,传递给控制器的参数应该是
params[:id]
。还不清楚在哪里定义了
task_params

如果仍然出现错误,请在提交表单时检查日志输出中的参数,并将其发布到此处。

1)您需要以某种方式将项目ID传递给
TasksController\new
。 一种方法是将其作为请求URL的一部分传递,类似于:

<host>/tasks/new?project_id=<project ID>
@project = Project.find(params[:project_id])
@task = current_user.own_tasks.build(task_params)
@task.taskprojects.build(project: @project)
if @task.save
...
有一种只向视图传递一个对象的理念,这里我们传递2:@task和@project_id。我不担心这一点,但您可能想了解表单对象:

3) 在表单上添加一个带有项目ID的隐藏字段。由于@project\u ID不是@task模型的一部分,我们将使用输入标记帮助器而不是基于表单的帮助器:

<%= hidden_field_tag 'project_id', @project_id %>
因此,您的
#create
操作看起来像:

<host>/tasks/new?project_id=<project ID>
@project = Project.find(params[:project_id])
@task = current_user.own_tasks.build(task_params)
@task.taskprojects.build(project: @project)
if @task.save
...
1) 您需要以某种方式将项目ID传递给
TasksController#new
。 一种方法是将其作为请求URL的一部分传递,类似于:

<host>/tasks/new?project_id=<project ID>
@project = Project.find(params[:project_id])
@task = current_user.own_tasks.build(task_params)
@task.taskprojects.build(project: @project)
if @task.save
...
有一种只向视图传递一个对象的理念,这里我们传递2:@task和@project_id。我不担心这一点,但您可能想了解表单对象:

3) 在表单上添加一个带有项目ID的隐藏字段。由于@project\u ID不是@task模型的一部分,我们将使用输入标记帮助器而不是基于表单的帮助器:

<%= hidden_field_tag 'project_id', @project_id %>
因此,您的
#create
操作看起来像:

<host>/tasks/new?project_id=<project ID>
@project = Project.find(params[:project_id])
@task = current_user.own_tasks.build(task_params)
@task.taskprojects.build(project: @project)
if @task.save
...

thx Anthony-我已经添加了我的任务参数代码(在任务控制器的底部)。我应该如何/在何处传递您提到的参数[:id]?在您的
TasksController#create
语句中,我已经更新了我的答案。它仍然找不到该id…我显然传递不正确。我已经用log output.thx Anthony进行了更新-我已经添加了我的任务参数代码(在任务控制器的底部)。我应该如何/在何处传递您提到的参数[:id]?在您的
TasksController#create
语句中,我已经更新了我的答案。它仍然找不到该id…我显然传递不正确。我已经更新了log output.thx Alan-除了第一步之外,我想我已经完成了大部分工作。我在哪里完成在URL中传递它?它是否在新任务操作的路径中?(同样在这种情况下,一个任务确实属于多个项目,因此我可能无法采用“属于”的方法)。忽略Alan-我刚刚在新任务路径的末尾通过了(:project\u id=>@project.id)。我遵循了所有步骤……1)工作得很好。但是2)引起了一个问题:当尝试访问新任务页面时,我现在在TasksController中得到了NoMethodError,新的未定义方法'project_id='for nil:nilclass我已经更新了我的答案,以处理项目和任务之间的多对多关系。希望这有帮助。thx艾伦-我想除了第一步之外,我大部分都在遵循。我在哪里完成在URL中传递它?它是否在新任务操作的路径中?(同样在这种情况下,一个任务确实属于多个项目,因此我可能无法采用“属于”的方法)。忽略Alan-我刚刚在新任务路径的末尾通过了(:project\u id=>@project.id)。我遵循了所有步骤……1)工作得很好。但是2)引起了一个问题:当尝试访问新任务页面时,我现在在TasksController中得到了NoMethodError,新的未定义方法'project_id='for nil:nilclass我已经更新了我的答案,以处理项目和任务之间的多对多关系。希望这有帮助。
@project = Project.find(params[:project_id])
@task = current_user.own_tasks.build(task_params)
@task.taskprojects.build(project: @project)
if @task.save
...