Ruby on rails 未定义的方法“[]';对于nil:NilClass,当用户展开项目时
在我的应用程序中,用户可以跟踪项目。我一直在遵循Michael Hartl关于跟踪用户的指南,并在跟踪项目的过程中对其进行调整 我当前正在执行以下操作,但当我单击“取消以下操作”时,会出现以下错误: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 销毁操作
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 %>