0
0

More than 1 year has passed since last update.

chartkick メタ文字を利用してブランクな要素をつくる

Last updated at Posted at 2021-11-04

開発環境

ruby 2.6.5
Ruby on Rails 5.2.5

前提

gem chartkick をつかって棒グラフを実装している

本題

chartkick で棒グラフを作ってるんだけど

Image from Gyazo

要素が少ないとブサイクになる

これを

Image from Gyazo

こうするためにいろいろやった


まず考えたのは要素の大きさを細くすること

しかしうまいことやり方がわからず

で、次に考えたのが今回の本題。

まずはそもそもの部分 chartkick の仕様について

chartkick に変数を渡す場合は多重配列で渡してやり、
中の配列の1番目にラベル名、2番目に数字を
渡してやればいい

だから今回の画像の例だと

@chart = [ [関蝉丸神社上社, 1], [熊野三山, 1] ]

この @chartchartkick に渡してやると図が描画される

そこで要素が5個以下だったら計6個の要素がデフォルトになるようにロジックを書いた。

具体的なコードは以下

コントローラー
    if @chart.count <= 5
      dammy = 6 - @chart.count
      dammy.times do |n|
        @chart << ["",""]
      end
    end

これなら @chart の回数に依存する数だけダミーの要素が @chart にはいる

実際に中身をみてみると

Image from Gyazo

きちんとロジックは機能している

しかし

Image from Gyazo

なぜか1つ分の要素としてしかカウントされていない

これはおそらく内部的に distinct: true みたいにされてて
同じ要素が削除されてしまっている

しかしそのへんをオフにするオプションが見つからなくて困った


最終的にはコードは以下みたいにした

コントローラー
    if @chart.count <= 5
      dammy = 6 - @chart.count
      dammy.times do |n|
        @chart << ["\n"*n,0]
      end
    end

メタ文字をいれることでそれぞれの要素を一意にする

実際に中身を見てみると

Image from Gyazo

こんなふうにそれぞれが一意になってそう

そして View で描画される際にはメタ文字として認識されるから \n は消える

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0