2017-08-10 64 views
1

在我构建的应用程序中,用户可以选择不同类型的行业,因为他们注册到应用程序。在rails上访问多个行业类型的应用程序

用户通过从下拉选择器中选择其行业来选择其行业类型。

这是在user.rb模型

INDUSTRY_TYPES = YAML.load_file(Rails.root.join('config', 'industry_types.yml')).freeze 

,这里是在sign up视图代码

<div class="field"> 
    <%= f.label :industry_type %> 
    <%= f.select(:industry_type, options_for_select(User::INDUSTRY_TYPES)) %> 
    </div> 

有些用户可能会在农业,有的在steelworking等

因此,我希望能够在index.html.erb上显示用户所处的行业类型,例如两个用户在农业,一个在钢铁行业中排名第四,所以在两个不同的行业将有6位用户。

industry_type被保存到数据库。

我的问题基本上是如何能够从数据库中获取这些值?

更新 我试图将这个User.all.map(&:industry_type).count添加到一个变量,但它似乎只计数一切。

我知道如何显示每个用户的行业类型,但要获得每个行业的总人数会更加复杂。

有没有办法做到这一点?

+0

你使用PostgreSQL?如果不是,您使用的是什么RDMS? – MrYoshiji

+0

是啊,我正在使用postgreSQL – DaudiHell

回答

1

你可以做到以下几点:

User.group(:industry_type).count 

它应该会返回一个哈希结构类似:

{ "industry_type_1" => 1, "industry_type_1" => 2, "industry_type_1" => 3 } 

如果“industry_type_2”不与任何用户,也不会在哈希。换句话说,User.where(id: -1).group(:industry_type).count返回一个空的散列。

显示结果:

# haml 
- User.group(:industry_type).count.each do |industry_type, count| 
    = "The Industry '#{industry_type}' has #{count} User(s)" 
+0

好的,谢谢@MrYoshiji,你能看到我的编辑,是不是从'User.all.map(&:industry_type).count'? – DaudiHell

+0

'User.all.map(&:industry_type)'为范围的每个用户返回'industry_type'属性的值,然后对它们进行“计数”。所以这基本上是对用户进行计数。 – MrYoshiji

+0

好吧,我明白了,但这可能会在视图中显示整个哈希?例如'User.group(:industry_type).count (3.7ms)SELECT COUNT(*)AS count_all,industry_type AS industry_type FROM“users”GROUP BY“users”。“industry_type” => {nil => 1,中等“=> 1,”重“=> 3,”养殖“=> 1,”渔业“=> 2,”轻“=> 1,”脏“=> 1} ' – DaudiHell

0

你试过类似User.group(:industry_type).count的东西吗?

相关问题