1

由于下面的代码看起来很老旧且丑陋。但是在玩这种方式之后只是工作。

def duplicated? url
  found = false
  current_user.bookmarks.each do |bookmark|
    if bookmark.url.eql? url
      found = true
    end
  end
  found
end

我消除了找到的本地 var 和这样的 if 语句

def duplicated? url
  current_user.bookmarks.each do |bookmark|
    bookmark.url.eql? url
  end
end

它返回错误的预期结果。

知道如何改进吗?谢谢

4

2 回答 2

10

我认为您需要Enumerable#any?这里。应该首选映射/包含对,因为它不会创建临时数组,并且会在找到的第一个元素上尽早返回。

def duplicated? url
  current_user.bookmarks.any?{|b| b.url.eql? url }
end
于 2012-12-26T13:37:53.320 回答
2
def duplicated?(url)
   current_user.bookmarks.map{|bm| bm.url}.include?(url)
end
于 2012-12-26T13:44:42.290 回答