将随机Rails变量设置为不等于另一个随机变量?

时间:2014-01-08 22:44:44

标签: ruby-on-rails random

我在Rails控制器中有2个实例变量:

@stories = Post.tagged_with("test").all(:order => "RANDOM()", :limit => 1)
@stories2 = Post.tagged_with("test").where('post_id not in (?)', [@stories]).all(:order => "RANDOM()", :limit => 1)

我不希望另一个实例变量与另一个实例变量相等,但它们都必须是"随机的" (我知道这在技术上并不是随机的)。是否可以设置一个变量随机,除了一个值?

2 个答案:

答案 0 :(得分:2)

@stories, @stories2 = Post.tagged_with("test").all(order: "RANDOM()", limit: 2)

答案 1 :(得分:1)

您可以使第二个查询返回2,并执行一些逻辑来检查等效性

@stories = Post.tagged_with("test").all(:order => "RANDOM()", :limit => 1)
@stories2 = Post.tagged_with("test").where('post_id not in (?)', [@stories]).all(:order => "RANDOM()", :limit => 1)

@stories2.delete_at(@stories[0] == @stories2[0] ? 0 : 1);

使用上面的代码,如果第一个对象中的单个元素与第二个对象的单个元素相同,我们将其删除并使用另一个。如果它们不相同,我们会删除第二个数组中的“额外”故事。最后,每个实例变量在数组中都有一个项目,它们将不相同。