如何在ruby中的f.select里面的@ object.map中添加条件

时间:2014-09-06 16:43:10

标签: ruby-on-rails ruby forms select map

我正在尝试选择世界上所有国家/地区的名称右侧的()内部用户数。这就是我的下拉菜单的样子:

- 全部 - (15)
西班牙(2)
美国(10)
斯洛伐克(3)

到目前为止,我在所有国家/地区的选择中都列出了这样列出的所有国家和用户,但问题是--ALL--选项。 --All--选项值为“”。它应该统计世界上所有用户,但是计算所有没有国家/地区的用户,数据库中的值为“”。

这是我为select的每个值显示所有国家/地区的代码:

<%= f.label :country, "Country" %>
<% if @country_sel %>
  <%= f.select :country_sel, @country.map{ |p|    [p.country_name + ' ('+ User.where("cc_iso LIKE ?", p.cc_iso).count().to_s + ')', p.cc_iso] }, :selected => @country_sel %>
<% else %>
  <%= f.select :country_sel, @country.map{ |p| [p.country_name + ' ('+ User.where("cc_iso LIKE ?", p.cc_iso).count().to_s + ')', p.cc_iso] } %>
<% end %>

这是我试图编写的代码,以便将 - 世界上所有国家/地区列在--ALL--选项的右侧。

<% if @country_sel %>
    <%= f.select :country_sel, @country.map{ |p| [p.country_name + ' ('+ User.where("cc_iso LIKE ?", p.cc_iso).count().to_s + ')', p.cc_iso] }, :selected => @country_sel %>
  <% else %><%= f.select :country_sel, @country.map{ |p| [p.country_name + ' ('+ %>
        <% if p.country_name == "" %><%= User.all.count().to_s + ')', p.cc_iso] } %><%else %><%= User.where("cc_iso LIKE ?", p.cc_iso).count().to_s + ')', p.cc_iso] } %> 
        <%end%> 
<% end %>

但它不起作用,我不知道如何在f.select内的地图内写条件。 我不知道我是否采取正确的方式:)

请你帮帮我?

非常感谢

2 个答案:

答案 0 :(得分:0)

这可能不是您正在寻找的答案,但简短的回答是,“不要”#34;。你的观点不应该这么聪明。在控制器中创建国家/地区列表并将其传递给视图。您的f.select只需将国家/地区名称(包括元&#34; - ALL - &#34;国家/地区)与用户数量相结合。

除了简化您的观点之外,它还提供了使用group而不是针对每个国家/地区的单独查询来提高代码效率的机会。

答案 1 :(得分:0)

假设您的国家/地区位于阵列中,首先您最好在控制器中进行总计算

@total_users = @countries.inject{|total,country| total+= country.users.count}

或者,如果你可以直接从模型中做到这一点也很好,比如User.count或其他什么

然后在视图中

f.select :country_sel, @countries.collect{|country| ["#{country.name} (#{country.users.count.to_s})", country.id] }, selected: @country_sel, include_blank: "All (#{total_users})"