在我的应用中,用户可以关注项目。我一直在关注 Michael Hartl 关于关注用户的指南,并在后续项目的过程中对其进行调整。
我目前正在关注工作,但是当我单击取消关注时,我收到此错误:
undefined method `[]' for nil:NilClass
关于我的 Follows 控制器中的以下部分:
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 %>
这些方法在我的用户模型中:
def follow_project!(project)
follows.create!(:followed_id => project.id)
end
def unfollow_project!(project)
follows.find_by_followed_id(project).destroy
end
我的 routes.rb 中有这个:
resources :follows, only: [:create, :destroy]
还有这个:
resources :users do
member do
get :following, :followers
end
end
我发现如果我绕过 before_action 进行销毁,而是将其放在操作的开头:
@project = Follow.find(params[:id]).followed_id
它有效,但随后失败:
redirect_to @project
我不完全确定这条线为什么有效,但我宁愿让它按照指南工作,有什么想法吗?