Rails collection_select изменить вывод - PullRequest
0 голосов
/ 03 декабря 2011

В одном из представлений (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) и количество (новый счет, который я получу в подзапросе) в раскрывающийся списоккак одна полная строка.)

1 Ответ

0 голосов
/ 04 декабря 2011

удалось решить это следующим образом:

<%= 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"(так что на него ссылается символ: имя).

...