Rails Activerecord发现所有包括重复项

时间:2011-05-13 15:52:13

标签: ruby-on-rails ruby activerecord

如何在视图中显示重复的帖子?

我希望能够做到这样的事情:

@post = post.find(1,2,1)

返回帖子1,帖子2,然后帖子1(再次)。

意识到这是一个愚蠢的问题,但我找不到任何文件。

2 个答案:

答案 0 :(得分:1)

虽然我不确定用例,但您可以执行以下操作:

@posts = Post.find(1,2) << Post.find(1)

你可以在你的Post模型中定义它:

def find_with_array(*args)
   posts = []
   for arg in args
     posts << Post.find(arg)
   end
   posts
end

显然,由于您正在进行许多SQL调用,因此上述效率很低。如果你想要它有效,那么你可以编写一个代码来进行一次sql调用(但不会返回重复项),然后遍历数组并重新排列(复制重复项),例如(未完全测试):

def find_with_array(*args)
  posts_with_no_duplicates = Post.find(args)
  posts_with_duplicates = []
  for arg in args
    for post in posts_with_no_duplicates
       if arg == post.id
         posts_with_duplicates << post
       end
    end
  end
end

这个应该更好,因为你只调用一次DB(通常是最慢的部分)但是它是O(N ^ 2)如果需要,可能有办法使它成为O(N)。然而,它与之前的选项相比有了很大的改进

答案 1 :(得分:0)

不知道更多细节,这是我建议的。看一下有关复选框数组的帖子:http://www.skuunk.com/2008/05/checkbox-arrays-in-rails.html

每个复选框都会将值放入特定的params键。这将解决获取具有值列表的数组的问题。如果这不能解决您的特定问题,请在评论中告诉我。