nil的未定义方法`users':删除关联时的NilClass

时间:2015-03-09 18:27:50

标签: ruby-on-rails associations

我有

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

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

1 个答案:

答案 0 :(得分:1)

当你说这个时,它将调用控制器方法取消关注,并且在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

它将返回该clot实例的用户数组。而且您无法在destroy对象上调用array方法。所以first将返回第一个找到的对象,所以你可以像

那样写
@clot.users.first.destory!

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