Ruby
自前でSQLを書いていたら、「incompatible character encodings: ASCII-8BIT and UTF-8」というエラーが出た。ASCII-8BITとUTF-8が文字列中で混在してしまったようだ。 対策としては、下記のようにエンコーディング指定すればよい。 msg.force_encoding("utf…
config\application.rbに下記のようにタイムゾーンを東京に設定している。 config.time_zone = 'Tokyo' しかし、Date.todayなどを使用すると、Heroku上で時差が生じてしまった。 config\application.rbで設定したタイムゾーンを使うには、zoneを使うといいよ…
SQLite3では、点数を降順で並べる下記のようなスコープで、nullが末尾に来ていたが、PostgreSQLだと、nullが先頭に来てしまった。 scope :order_score_desc, -> { order(score: :desc) } そこで、下記のように、(列名 is null)を追加してあげると、PostgreSQ…
N+1問題解決のため、includesの設定をしていた。groupがuserを参照しており、userがdepartmentとpostを参照しているとき、groupからdepartmentとpostの両方ををincludesで指定するのにちょっと手間取った。group → user → department・post 下記のように書い…
以前、ActiveRecordでorを使用する方法を見つけましたが、もっと簡単な方法がありました。 Rails4 ActiveRecordでorを使用する - ayaketanのプログラミング勉強日記 ユーザーが所属を3つ持つことができるとします。 ある所属に属するユーザーを抽出するには…
CSVファイル読み込みのテンプレートファイルとして、ヘッダのみ記載されたCSVファイルのダウンロードをしたかった。 CSV出力の情報は多かったが、ヘッダのみの情報が少なくてちょっとつまずいたのでメモ。 モデルにメソッド追加 # CSV読み込みのテンプレート…
rspecのバージョンを3.0.1に上げた後、テストを実行したら、今まで通っていたテストのほとんどが失敗した。原因は2つあった。1つ目は、be_trueとbe_falseが、be_truthyとbe_falseyに変更されていたからだった。be_trueをbe_truthyに、be_falseをbe_falseyに…
N+1問題解決のため、includesの設定をしていた。groupがuserを参照しており、userがdepartmentを参照しているとき、groupからdepartmentをincludesで指定するのにちょっと手間取った。group → user → department 下記のように書いてもうまくいかなかった # @…
私は今まで、点数がある点数以外のときというスコープを下記のように書いていました。 scope :score_is_not, ->(score) {where("score != ?", score)} いまさらですが、Rails4では、where句をnotで否定できるようです。 scope :score_is_not, ->(score) {whe…
サインインをdeviseを用いて実装している。 サインイン必須のコントローラのテストをおこなうときに、サインイン状態を作るのに少し手間取ったのでメモ。 spec\spec_helper.rbに下記のように記載 RSpec.configure do |config| … config.include Devise::Test…
specでテストを書いていますが、すべてのテストがかけているか不安だったので、カバレッジを調べることにした。simplecovというgemを使うといいようだ。Gemfileに次のように追記し、bundle install # カバレッジ gem "simplecov", require: false, group: :t…
flashに設定したメッセージが2回表示されて困ったのでメモ。下記のようにflashにalertを設定し、newを再表示していた。 flash[:alert] = "登録に失敗しました。" render action: 'new' 登録画面で登録ボタンを押下すると、正常にメッセージが表示されたが、…
レーダーチャートで3つのデータを比較したかった。下記のように記載していたが、背景色があると、見にくいと感じました。 var radarChartData = { labels: <%= @labels.html_safe %>, datasets: [ { fillColor: "rgba(151,187,205,0.5)", // 線で囲まれた部…
マイグレーションファイルを作成し、rake db:migreteを実行した後、元に戻したくなった。下記のコマンドを実行すれば、ロールバックできた。 rake db:rollback 参考: rake db: migrate を rollback で元に戻す | deadwood
scopeで並び順を昇順と降順に指定する方法のメモ。 例えば、scoreで並び順を指定する場合、昇順と降順は下記のように指定する。 # 昇順 scope :order_score, -> { order(:score) } # 降順 scope :order_score_desc, -> { order(score: :desc) } 参考: Rails…
アクション毎にレイアウトを変更しようとして、1度失敗したので、メモ。 下記の2つのレイアウトファイルを作成した。 app/views/layouts/basic.html.erb app/views/layouts/custom.html.erb indexにbasic.html.erbのレイアウト、showにcustom.html.erbのレイ…
ユーザーの組み合わせを定義したモデルをつくり、複数の参照を設定していた。 dependent destroyを設定しようとして躓いたので、メモ。combinationモデルでは、user_idとpartner_idがuserモデルを参照しているものとする。当初下記のように記載していた。 us…
date_selectにclassを指定したかったが、うまくいかなかった。 <%= f.date_select :deadline_at, order: [ :year, :month, :day ], use_month_numbers: true %> オプションとHTMLのオプションを別の{}で囲むとうまくいった。 <%= f.date_select :deadline_at…
レイアウトを管理者と一般ユーザー用に分けたかった。 コントローラーを継承するのではなく、レイアウトで分ける方法を見つけたので、メモ。app/views/layouts/application.html.erbに下記のように記載した。 <html> <head> <title>SampleProject</title> <%= stylesheet_link_tag "app</head></html>…
chart.jsで描画したレーダーチャートの目盛ラベルを変更するのに苦戦したので、その方法をメモ。 コントローラで、表示したい目盛ラベルを変数に代入する。 デフォルトと同じ @scale_label = "<%= value %>" デフォルトの目盛ラベルにPを付加する場合 @scale…
ActiveRecordを簡潔に書くことができるscopeのメモ。 scopeの定義 class User < ActiveRecord::Base scope :created_before, ->(datetime) { where("created_at < ?", datetime) } end scopeはクラスメソッドのようにも、インスタンスメソッドのようにも使え…
chart.jsで描画したレーダーチャートをwicked_pdfを使って、PDF出力する手順のメモ。chart.jsで描画したレーダーチャートをwicked_pdfを使って、PDF出力しようとしたらうまくいかなかった。 wickee_pdf推奨のgem「wkhtmltopdf-binary」が更新されていないの…
form_tagでactionとmethodを指定したかった。ルーティングは下記のように設定してあった。 resource :test, only: [:edit, :update] edit内で、form_tagを使用していたが、初期値では、methodがpostになってしまったため、自分でmethodにpatchを指定する必要…
ユーザーをグループ分けするときに、そのグループに所属するユーザーをチェックボックスで選択したい。複数のチェックボックスの入力結果を処理するときに、不要な"0"が取得できてしまったので、メモ。まずは、ビューでチェックボックスを実装 <% @users.eac…
stripで文字列の前後の空白を削除しようとしたら、全角スペースが削除されなかった。そこで、メソッドを自作することにした。 class String # 文字列前後の全角・半角スペースを削除 def strip_with_full_size_space! self.gsub!(/^[ \s]*(.*?)[ \s]*$/, '\1…
前回、csvファイルをアップロードして読み込む方法を調べた。 Rails4 csvファイルをアップロードして読み込む - ayaketanのプログラミング勉強日記 そのテストをおこなうため、アップロードしたファイルのテスト方法を調べた。 fixture_file_uploadを使うと…
ユーザーをCSVファイルから登録したかった。 csvファイルをアップロードして読み込む方法をメモする。 ルーティングの設定 アップロードするCSVファイルの指定画面と、CSVファイルの読み込み処理のルーティングを設定する。 config\routes.rbに下記のように…
Chart.jsでレーダーチャートをつくったが、目盛りの設定が反映されていないことに気が付いた。0~6の範囲のデータを表示するレーダーチャートを作成したい。 レーダーチャートのデータはすべて、3のデータとする。 下記のように目盛りの数、目盛りの間隔、目…
リンク先を別タブで開く方法として、target: "_blank"がある。 しかし、これだと、リンクをクリックするたびに、タブが増えてしまう。必要以上にタブを増やさずにリンク先を別タブで開く方法として、target: "_new"がある。 :tagrget => "_blank" <%= link_t…
userモデルとcombinationモデルがあるとする。 combinationモデルにはuser_idとtarget_idがあり、userモデルとリレーションを設定したい。 設定 userのmodel has_many :combinations combinationのmodel belongs_to :user belongs_to :target, :class_name =…