【问题标题】:Rails Active Record find all including duplicatesRails Active Record 查找所有内容,包括重复项
【发布时间】:2011-05-13 15:52:13
【问题描述】:

如何在我的视图中获得重复的帖子?

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

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

返回帖子 1 、帖子 2 和帖子 1(再次)。

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

【问题讨论】:

  • 这里的用例是什么?这可能有助于确定解决此问题的最佳方法。
  • 是的,也许这比我想象的要复杂一些。我有一个表格,希望能够发送一个带有值的数组。我需要以其他方式解决这个问题吗?

标签: ruby-on-rails ruby activerecord


【解决方案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)。但是,它比以前的选项有了很大的改进

【讨论】:

  • 是的,这行得通,但我希望能够发送一个带有值的数组。
  • 非常感谢 Tam,如果您可以给我一些代码示例或提示如何遍历数组并复制重复项,我将不胜感激。
【解决方案2】:

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

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

【讨论】:

  • 是的,这就是我所拥有的,只要我发送具有不同值的数组,它就可以正常工作。例如,如果我有一个值为 ["oranges" , "apples","bananas"] 的数组,但我希望能够发送一个类似 ["oranges" , "apples", "bananas","oranges" 的数组]。上面的两个数组都使用 activerecord .find 返回相同的值
猜你喜欢
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多