Ruby on rails 。当只应存在一个结果时,在Rails应用程序中使用每个结果
我不明白为什么“each”出现在第三行,因为我认为没有其他页面符合条件Ruby on rails 。当只应存在一个结果时,在Rails应用程序中使用每个结果,ruby-on-rails,Ruby On Rails,我不明白为什么“each”出现在第三行,因为我认为没有其他页面符合条件 :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
: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
Active Record finder方法
,其中
返回一个数组,即使其中只有一个元素,因此您必须使用每个
遍历数组,或者如果您知道只返回一个,您可以执行类似于使用第一
方法的操作,使用第一
方法的示例如下:
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\u id=>session[:user\u id],:Friend\u id=>params[:id])。first
仅返回第一个(如果正确的话)对象
希望这有帮助我认为你的
是对的。每个都不是必需的。My Rails 2.3提供了.destroy\u 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
因此,如果找不到要销毁的好友,请添加该好友。将该代码晾干会使实际的控制流更加明显。只是说,“…我会重构它以显示正确的技术,并使它更简单,但我不知道它做什么。为什么你要毁掉一个朋友,如果你找到了,然后创建一个新朋友,然后把这个朋友扔掉呢?Phlip先生,这个代码来自我的文本中的示例代码,它有一个系统,当你推链接时,你可以和某人成为朋友,当你再次推链接时,你可以破坏关系。