路由自定义,通过关联删除has_many的操作

时间:2012-04-07 22:04:34

标签: ruby-on-rails routes

我有很多通过协会。

公司有很多用户跟随。我希望用户能够关注公司。 - 我正在为用户使用Devise。

我有一个自定义行动,既可以关注公司,也可以取消公司的后续行动。以下操作正在进行,但我在取消关注时遇到了问题。

 def follow
  @firm = Firm.find(params[:id])
  @firm.users << current_user
  respond_to do |format|
    format.html { redirect_to @firm }
  end
 end

def unfollow
 @firm = Firm.find(params[:id])
 current_user.follows.find_by_firm_id(@firm.id).destroy
 respond_to do |format|
  format.html { redirect_to firms_url }
end

端 在我的routes.rb

resources :firms do
  member do
   post 'follow'
   delete 'unfollow'
  end
end

并在我的公司视图中

 <%= link_to 'unfollow', unfollow_firm_path(firm), :method => 'delete' %>

我收到以下错误

NoMethodError in FirmsController#unfollow

undefined method `follows' for nil:NilClass

我的rake routes命令显示以下内容

  follow_firm POST   /firms/:id/follow(.:format)   firms#follow
  unfollow_firm DELETE /firms/:id/unfollow(.:format) firms#unfollow

如果您有任何想法,我将非常感激!

非常感谢

1 个答案:

答案 0 :(得分:0)

错误undefined method 'follows' for nil:NilClass来自:

current_user.follows.find_by_firm_id(@firm.id).destroy

您需要测试用户是否已登录,以便current_user不是nil

也许:

current_user.follows.find_by_firm_id(@firm.id).destroy if current_user