我一直在閱讀關於Rails活動記錄模型操作的教程。我對.select和.group之間的區別有點困惑。如果我想獲得我的所有用戶的所有名稱表的用戶,我相信我能做到:Rails活動記錄的select和group有什麼區別?
myUsers = User.select(:name)
所以怎麼會是這樣不同,他說:
myUsers = User.group(:name)
感謝,
將
我一直在閱讀關於Rails活動記錄模型操作的教程。我對.select和.group之間的區別有點困惑。如果我想獲得我的所有用戶的所有名稱表的用戶,我相信我能做到:Rails活動記錄的select和group有什麼區別?
myUsers = User.select(:name)
所以怎麼會是這樣不同,他說:
myUsers = User.group(:name)
感謝,
將
兩個不同的是這樣的:
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)
將是從你的數據庫中拉出所有名字的最快方法。
有#to_sql
方法檢查什麼DB查詢它正在建設。通過查看數據庫查詢,您可以確認自己發生了什麼。請看下面的例子: -
[email protected]:~/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"
,這意味着,從表votes
的所有行選擇choice
列。
Vote.group(:choice)
將votes
表的行分組,基於列choice
並選擇所有列。
如果我想獲取表User中所有用戶的所有名稱。
更好的是User.pluck(:name)
。
啊,好的。感謝您的澄清! – Will 2014-11-04 03:09:35