我有两张桌子,书:
book:
id
book_name
brand_id
belongs_to :brand, foreign_key: "brand_id"
和品牌:
brand:
id
brand_name
has_many :books
我想从书中分组数据并得到如下结果:
id brand_name count
1 b1 20
2 b2 32
并在视图上显示,使用params获取值并插入到collection_select中,如:
<%= collection_select('', :brand_id, @brands , @brands.id, @brands.name + '(' + @brands.count + ')' , {:prompt => 'please select!'} ) %><br>
我希望下拉列表如下:
B1(20) B2(32)
我该怎么做? 我试过@brands = Book.group(:brand_id).count 但它只显示:
'1':20
'2':32
我不知道如何通过参数获取价值,并且没有brand_name,请给我一些建议!
答案 0 :(得分:1)
您问题的可能解决方案之一是:
@brands = Brand.joins(:books).select("brands.id, brands.name, COUNT(books.id) as cnt").group("brands.id, brands.brand_name")
现在您可以将其转换为集合,select
助手可以使用它:
collection = @brands.map{|b| [ "#{b.name} (#{b.cnt})", b.id ] }
并以您的形式使用它:
select 'book', 'brand_id', collection
答案 1 :(得分:0)
嘿,你可以试试这种方式。确保查询中的模型名称和表名称。它会返回一个活动的记录数组,然后您可以根据您的集合选择哈希管理:
brands = Book.joins(:brand).select("brands.id as id, brands.name as brand_name,count(*) as count").group(:brand_id)
您可以通过
创建所需的数组@brands = brands.collect{|o| ["#{o.brand_name}(#{o.count})",o.id]}
之后,您可以传递此数组以选择标记为:
<%= select_tag 'brand_id' , options_for_select(@brands) %>