1

ユーザーのモデルにジオチャートを実装しようとしていますが、ヘルパー メソッドの SQL クエリに問題があります。ユーザー モデルには、フィールドの 1 つとして国があります。

私の問題は、データをグループ化してjsに渡すことです

users.js

google.load('visualization', '1', {'packages': ['geochart']});
google.setOnLoadCallback(drawRegionsMap);

function drawRegionsMap() {
//    var data = google.visualization.arrayToDataTable([
//        ['Country', 'Popularity'],
//        ['Germany', 200],
//        ['United States', 300],
//        ['Brazil', 400],
//        ['Canada', 500],
//        ['France', 600],
//        ['RU', 700]
//    ]);

    var data = google.visualization.arrayToDataTable(['users_country_data']);

    var options = {};

    var chart = new google.visualization.GeoChart(document.getElementById('chart_div'));
    chart.draw(data, options);
};

index.html.rb

<%= content_tag :div, "", id: "chart_div", style: "width: 400px; height:200px;",  data: {users: users_country_data} %>

users.helpers.rb

  def users_country_data
      {
         Country: @users.group("country"),
         Popularity:  @users.count(:group => "country")
      }

  end

編集。

ここに画像の説明を入力

4

1 に答える 1

0

これに丸一日を費やして申し訳ありません。Rails と Ruby はもっと簡単なはずです。

def users_country_data
  countries = @users.select('distinct country').map(&:country)
  countries.collect { |country| [country, @users.where(country: country).count] }.to_s
end

次のようなjsの配列が得られます。

[["Argentina", 100], ["USA", 200]]

ヘッダーも追加する場合:

def users_country_data
  countries = @users.select('distinct country').map(&:country)
  countries.collect { |country| [country, @users.where(country: country).count] }.unshift(['Country', 'Popularity']).to_s
end

@users はユーザーの配列であるため、間違った数の引数 (0 に対して 1) を取得しています。@users がユーザーの配列であり、ActiveRecord 関係ではない理由は何ですか?

編集:比較のために == の代わりに = を使用しました

def users_country_data
  countries = @users.map(&:country).uniq
  countries.collect { |country| [country, @users.collect {|u| u.country == country}.count] }.to_s
end

チャットの後、すべてのユーザーのグラフが必要であることを念頭に置いてください。

def users_country_data
  countries = User.select('distinct country').map(&:country)
  countries.collect { |country| [country, User.where(country: country).count] }.unshift(['Country', 'Popularity']).to_s
end
于 2013-03-31T09:58:35.940 に答える