删除关联时 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
方法。销毁所有对象
我有
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
= 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
方法。销毁所有对象