Ruby on rails 未定义的方法“[]';对于nil:NilClass,当用户展开项目时

Ruby on rails 未定义的方法“[]';对于nil:NilClass,当用户展开项目时,ruby-on-rails,Ruby On Rails,在我的应用程序中,用户可以跟踪项目。我一直在遵循Michael Hartl关于跟踪用户的指南,并在跟踪项目的过程中对其进行调整 我当前正在执行以下操作,但当我单击“取消以下操作”时,会出现以下错误: undefined method `[]' for nil:NilClass 关于我的控制器中的以下部分: def get_followed_project @project = Project.find(params[:follow][:followed_id]) end 销毁操作

在我的应用程序中,用户可以跟踪项目。我一直在遵循Michael Hartl关于跟踪用户的指南,并在跟踪项目的过程中对其进行调整

我当前正在执行以下操作,但当我单击“取消以下操作”时,会出现以下错误:

undefined method `[]' for nil:NilClass
关于我的控制器中的以下部分:

def get_followed_project    
  @project = Project.find(params[:follow][:followed_id])
end
销毁操作的其余部分是:

def destroy
  current_user.unfollow_project!(@project)
  redirect_to @project
end
以下及以下各部分的格式为:

<%= form_for current_user.follows.build(:followed_id => @project.id) do |f| %>
  <%= f.hidden_field :followed_id %>
  <%= f.submit "Follow", class: "button" %>
<% end %>

<%= form_for current_user.follows.find_by_followed_id(@project), :html => { :method => :delete } do |f| %>
  <%= f.submit "Unfollow", class: "button" %>
<% end %>
我的路线中有这个。rb:

resources :follows, only: [:create, :destroy]
这是:

resources :users do
  member do
    get :following, :followers
  end
end
我发现,如果我绕过销毁的before_操作,而是将其放在操作的开头:

@project = Follow.find(params[:id]).followed_id
这是可行的,但它失败了:

redirect_to @project
我不完全确定这行为什么会起作用,但我更愿意让它按照指南工作,有什么想法吗?

当您单击“Unfollow”时,此表单没有名为“follow\u id”的字段,并且您的表单没有任何输入,因此
参数[:follow][:follow\u id]
将抛出一个错误,添加
f.hidden\u字段:follow\u id

<%= form_for current_user.follows.find_by_followed_id(@project), :html => { :method => :delete } do |f| %>
  <%= f.hidden_field :followed_id %>
  <%= f.submit "Unfollow", class: "button" %>
<% end %>
{:method=>:delete}do | f |%>

我敢打赌
参数[:follow]
是空的,所以
follows.find_by_followind_id(项目)。destroy
局部变量
following
来自何处?是的,我也这么认为,但我不确定为什么或应该进入其中。我相信@project是从表单中获取的,该表单是从调用表单部分的页面获取的-显示视图当您单击“Unfollow”时,该表单没有名为“follow\u id”的字段,因此
params[:follow][:follow\u id]
将抛出错误,添加
f.hidden\u字段:后跟\u id
,然后重试?是,请查看他的代码中有很多错误
<%= form_for current_user.follows.find_by_followed_id(@project), :html => { :method => :delete } do |f| %>
  <%= f.hidden_field :followed_id %>
  <%= f.submit "Unfollow", class: "button" %>
<% end %>