删除关联时 nil:NilClass 的未定义方法“用户”

undefined method `users' for nil:NilClass while deleting association

我有

class Clot < ActiveRecord::Base
    has_many :memberships
    has_many :users, through: :memberships
end

用户也一样

我有带动作的关注按钮

def follow
    @clot = Clot.find(params[:id])
    @clot.users << current_user
    redirect_to @clot
end 

它工作正常,但我想创建取消关注按钮

我写了

= button_to 'unollow', unfollow_clot_path(@clot), :method => :delete

  def unfollow
    @clot.users.destroy
  end

我的路线看起来像

 resources :clots do
      member do
        post :follow
        delete :unfollow
      end
  end

但我收到错误消息。请告诉我答案,如果我做错了,请告诉我正确的方法。 提前致谢

当你这样说的时候,它会调用controller方法unfollow,并且在params中会传递clot id。所以你必须找到那个 id

的 clot 对象
 = button_to 'unollow', unfollow_clot_path(@clot), :method => :delete

def method_name
    @clot = Clot.find(params[:id])
end

但是你什么时候会做

@clot.users

它将 return 该 clot 实例的用户数组。而且您不能在 array 对象上调用 destroy 方法。所以first会return你第一个找到的对象,所以你可以这样写

@clot.users.first.destory!

或者您也可以使用destory_all方法。销毁所有对象