2011-12-02 9 views
0

を変更collection_select I持ってこれは、例えば、ドロップダウンリストで、現在のユーザー(cur_username)でアクセスしているサイト名を一覧表示しますRailsはビューの1(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}) 

次のコード

Google.com 
Facebook.com 
Twitter.com 

は今、私はこのように、ユーザーが同じドロップダウンリストで、これらのサイトにアクセスした回数を表示する必要があります。

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

サイト名とともにカウントを含めるようにクエリを変更するにはどうすればよいですか? (上記の同じクエリ内のサブクエリでカウントを取得する方法を知っていますが、サイト(:name)の名前とカウント(サブクエリで取得する新しいカウント)をドロップダウンする方法を知らない。一つの完全な文字列としてリスト)

+0

あなたは単にActiverecordを使用しないでください。そして、あなたは 'acessible_sites.each {| site | "#{site.name}(#{site.visits})'やそれに影響するものを置く。このfind_by_sql行は醜いので、レールを利用したり、レールを守っているようには見えない。 – Batkins

+0

@Batkinsカウント(「ユーザーがこれらのサイトにアクセスした回数」)は絶えず変化するため、実行時に動的に取得する必要があります。 – Usering

答えて

0

はこの方法でそれを解決するために管理:メインのSQLクエリで

<%= 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}) %> 

私は名前の数を追加する(これはMySQLのバックエンドである)CONCATを使用していますが、属性nameを "name"にしておく(symbol:nameによって参照されるように)。

関連する問題