Rails活动记录的选择和组之间的区别是什么?

时间:2014-11-04 02:17:19

标签: mysql ruby-on-rails rails-activerecord

我一直在阅读有关Rails主动记录模型操作的教程。我对.select和.group之间的区别感到有点困惑。如果我想在表格中获取所有用户的所有名称,我相信我能做到:

myUsers = User.select(:name)

那怎么会说:

myUsers = User.group(:name)

感谢,

威尔

2 个答案:

答案 0 :(得分:2)

两者的不同之处在于:

User.select(:name)

等同于此SQL语句

SELECT name from users;

User.group(:name)

相当于

SELECT * from users GROUP BY name;

select(:name)不同的是,您按id排序所有行,但仅限列name。使用group(:name),您将获取所有列,但按列name排序。

User.pluck(:name)将是从数据库中提取所有名称的最快方法。

答案 1 :(得分:1)

#to_sql方法来检查它正在构建的 DB 查询。通过查看数据库查询,您可以确认自己发生了什么。看下面的例子: -

arup@linux-wzza:~/Rails/tv_sms_voting> rails c
Loading development environment (Rails 4.1.4)
>> Vote.group(:choice).to_sql
=> "SELECT \"votes\".* FROM \"votes\"  GROUP BY choice"
>> Vote.select(:choice).to_sql
=> "SELECT \"votes\".\"choice\" FROM \"votes\""
>>

现在很明显Vote.select(:choice)实际上是SELECT "votes"."choice" FROM "votes",这意味着,从表choice的所有行中选择votes列。

Vote.group(:choice)根据列voteschoice表的行进行分组,并选择所有列。

  

如果我想在表User中获取所有用户的所有名称。

最好的是User.pluck(:name)