单个ActiveRecord查询以获取结果集

时间:2015-08-07 07:37:28

标签: ruby-on-rails ruby postgresql activerecord

有两个表:

 1. users - {id, name, ...}
 2. users_availabiltiy {id, user_id, monday, tuesday, wednesday, thursday, friday, saturday, sunday, ...}

[moday, truesday and other days fields are of boolean type]

所以,如果一个用户可以在星期一,星期三和星期四使用,那么它的值将是真实的,其余的将具有错误值。 并且这两个表之间存在has_one关系。

现在,问题是,我需要一个ActiveRecord查询来获取n天内可用的所有用户[用户输入用户返回的日期,例如如果用户输入星期一,星期四和星期五,我们的系统需要返回所有这些天可用的用户] 另外,我们还需要根据最大天数匹配来订购结果集。

[all days matches -> first ranking]
[all days matches-1 -> second ranking] and so on.

注意:数据库是postgresql,rails版本是4。

这是最简单的方法:

input = ["moday","tuesday", "wednesday"]
b = input.map{|day| day+" = true"}
c = b.join(" or ")
b1 = a.map{|day| day+"::int"}
c1 = "*, "+b1.join(" + ")+" as total"
User.joins(:user_availabilty).select(c1).where(c).order("total DESC")

除此之外,有人能让我知道最好的和优化的方法吗?

1 个答案:

答案 0 :(得分:0)

这是最简单的方法:

input = ["moday","tuesday", "wednesday"]
b = input.map{|day| day+" = true"}
c = b.join(" or ")
b1 = a.map{|day| day+"::int"} c1 = "*, "+b1.join(" + ")+" as total"
User.joins(:user_availabilty).select(c1).where(c).order("total DESC")

除此之外,有人可以让我知道最佳和优化的方法。