我正在尝试选择世界上所有国家/地区的名称右侧的()内部用户数。这就是我的下拉菜单的样子:
- 全部 - (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
内的地图内写条件。
我不知道我是否采取正确的方式:)
请你帮帮我?
非常感谢
答案 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})"