Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 。当只应存在一个结果时,在Rails应用程序中使用每个结果_Ruby On Rails - Fatal编程技术网

Ruby on rails 。当只应存在一个结果时,在Rails应用程序中使用每个结果

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

我不明白为什么“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_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先生,这个代码来自我的文本中的示例代码,它有一个系统,当你推链接时,你可以和某人成为朋友,当你再次推链接时,你可以破坏关系。