我不明白为什么"每个"出现在第三行,因为我认为没有其他页面符合条件
:member_id => session[:user_id], :friend_id => params[:id]
你能告诉我为什么吗?
def friend
if Friend.where(:member_id => session[:user_id], :friend_id => params[:id]).exists? then
Friend.where(:member_id => session[:user_id], :friend_id => params[:id]).each do |f|
f.destroy
end
else
Friend.new({:member_id => session[:user_id], :friend_id =>params[:id].to_i}).save
end
redirect_to :action => 'show', :id => params[:id]
end
答案 0 :(得分:1)
Active Record finder方法where
返回一个数组,即使其中只有一个元素,因此您必须使用each
遍历数组,或者如果您知道只返回一个数组,你可以使用first
方法做一些事情,使用first
方法的例子是:
def friend
if Friend.where(:member_id => session[:user_id], :friend_id => params[:id]).exists?
Friend.where(:member_id => session[:user_id], :friend_id => params[:id]).first.destroy
else
Friend.new({:member_id => session[:user_id], :friend_id =>params[:id].to_i}).save
end
redirect_to :action => 'show', :id => params[:id]
end
Friend.where(:member_id => session[:user_id], :friend_id => params[:id]).first
返回第一个(如果你是正确的话),只返回对象
希望这有帮助
答案 1 :(得分:0)
我认为你是对的,不需要.each
。我的Rails 2.3提供.destroy_all
,它返回它所销毁的内容:
def friend
friend_params = { :member_id => session[:user_id], :friend_id => params[:id] }
if Friend.destroy_all(friend_params).empty?
Friend.new(friend_params).save
end
redirect_to :action => 'show', :id => params[:id]
end
因此,如果您找不到要销毁的朋友,请添加朋友。