Rails collection_select修改输出

时间:2011-12-02 22:37:54

标签: ruby-on-rails ruby erb

在其中一个视图(erb)中,我有以下代码

collection_select(:wp_article, :wp_site_id, WpSite.find_by_sql(["SELECT wp_sites.* FROM wp_sites, users_wp_sites, users WHERE users_wp_sites.user_id = users.id and users_wp_sites.wp_site_id = wp_sites.id and username= ?", session[:cur_username]]), :id, :name, 

{:prompt => true})

这会在下拉列表中列出当前用户可访问的站点名称(cur_username),例如

Google.com
Facebook.com
Twitter.com

现在,我需要在同一下拉列表中显示用户访问这些网站的次数,如下所示:

Google.com (32)
Facebook.com (68)
Twitter.com (21)

如何修改查询以包含计数和网站名称? (我知道如何在上面发布的同一查询中的子查询中获取计数,但不知道如何将站点名称(:name)和count(我将在子查询中获得的新计数)传递到下拉列表作为一个完整的字符串。)

1 个答案:

答案 0 :(得分:0)

管理以这种方式解决它:

<%= collection_select(:wp_article, :wp_site_id, WpSite.find_by_sql(["SELECT wp_sites.id, CONCAT(wp_sites.name, ' (', (select count(*) from wp_articles where wp_articles.wp_site_id = wp_sites.id and wp_articles.author = users.username and published = 1), ')') name FROM wp_sites, users_wp_sites, users WHERE users_wp_sites.user_id = users.id and users_wp_sites.wp_site_id = wp_sites.id and username= ?", session[:cur_username]]), :id, :name, {:prompt => true}) %>

在主SQL查询中,我使用CONCAT(它是一个MySQL后端)将计数附加到名称并保留属性名称“name”(以便它由symbol:name引用)。