我对RoR很新,并且攻击一个小应用程序。为了显示表单中某些模型列的现有值,我目前这样做:
<% form_for([@testbox, @testitem]) do |f| %>
<%= f.label :sortkey %><br />
<%= f.collection_select :sortkey, Testitem.groups , :sortkey, :sortkey, {:include_blank => true} %>
<% end %>
在Testitem
模型中,我有:
def Testitem.groups
return find_by_sql("SELECT DISTINCT sortkey from testitems; ")
end
我相信这有更优雅的解决方案吗?我尝试过find(:all).sortkey.unique
,但会抛出undefined method 'sortkey' for #<Array:0x59d1b60>
答案 0 :(得分:9)
这实现了同样的目的,但我不确定它是否更优雅:
Testitem.find(:all, :select => "DISTINCT sortkey")
答案 1 :(得分:1)
帕特里克罗伯逊的方式可能要快得多。您也可以使用group
选项执行此操作:
Testitem.find(:all, :group => "sortkey")
使用:select
选项会将DISTICT sortkey
放入SQL查询中,而使用:group
添加GROUP BY sortkey
。我不知道哪一个更快。
你也可以通过返回sortkey
的字符串来实现:
Testitem.find(:all).map(&:sortkey).uniq
这可能更慢,因为它将检索所有项目并在Ruby端而不是SQL端进行过滤。