Rails4 「incompatible character encodings: ASCII-8BIT and UTF-8」エラーが出た

自前でSQLを書いていたら、「incompatible character encodings: ASCII-8BIT and UTF-8」というエラーが出た。ASCII-8BITとUTF-8が文字列中で混在してしまったようだ。 対策としては、下記のようにエンコーディング指定すればよい。 msg.force_encoding("utf…

Rails4 タイムゾーンを設定しているのに、Heroku上で日付に時差が生じてしまう

config\application.rbに下記のようにタイムゾーンを東京に設定している。 config.time_zone = 'Tokyo' しかし、Date.todayなどを使用すると、Heroku上で時差が生じてしまった。 config\application.rbで設定したタイムゾーンを使うには、zoneを使うといいよ…

Rails4 PostgreSQLで数値を降順にソートしたらnullが先頭になってしまった

SQLite3では、点数を降順で並べる下記のようなスコープで、nullが末尾に来ていたが、PostgreSQLだと、nullが先頭に来てしまった。 scope :order_score_desc, -> { order(score: :desc) } そこで、下記のように、(列名 is null)を追加してあげると、PostgreSQ…

Rails4 3階層のincludesの複数指定

N+1問題解決のため、includesの設定をしていた。groupがuserを参照しており、userがdepartmentとpostを参照しているとき、groupからdepartmentとpostの両方ををincludesで指定するのにちょっと手間取った。group → user → department・post 下記のように書い…

Rails4 ActiveRecordでorを使用する簡単な方法

以前、ActiveRecordでorを使用する方法を見つけましたが、もっと簡単な方法がありました。 Rails4 ActiveRecordでorを使用する - ayaketanのプログラミング勉強日記 ユーザーが所属を3つ持つことができるとします。 ある所属に属するユーザーを抽出するには…

Rails4 ヘッダのみのCSVファイルをダウンロードする

CSVファイル読み込みのテンプレートファイルとして、ヘッダのみ記載されたCSVファイルのダウンロードをしたかった。 CSV出力の情報は多かったが、ヘッダのみの情報が少なくてちょっとつまずいたのでメモ。 モデルにメソッド追加 # CSV読み込みのテンプレート…

Rails4 rspec3に変更したら今まで通っていたテストが失敗した。

rspecのバージョンを3.0.1に上げた後、テストを実行したら、今まで通っていたテストのほとんどが失敗した。原因は2つあった。1つ目は、be_trueとbe_falseが、be_truthyとbe_falseyに変更されていたからだった。be_trueをbe_truthyに、be_falseをbe_falseyに…

Rails4 3階層のincludesの指定

N+1問題解決のため、includesの設定をしていた。groupがuserを参照しており、userがdepartmentを参照しているとき、groupからdepartmentをincludesで指定するのにちょっと手間取った。group → user → department 下記のように書いてもうまくいかなかった # @…

Rails4 where句をnotで否定する

私は今まで、点数がある点数以外のときというスコープを下記のように書いていました。 scope :score_is_not, ->(score) {where("score != ?", score)} いまさらですが、Rails4では、where句をnotで否定できるようです。 scope :score_is_not, ->(score) {whe…

Rails4 rspecとFactoryGirlを用いたdeviseでサインインした状態でのコントローラのテスト

サインインをdeviseを用いて実装している。 サインイン必須のコントローラのテストをおこなうときに、サインイン状態を作るのに少し手間取ったのでメモ。 spec\spec_helper.rbに下記のように記載 RSpec.configure do |config| … config.include Devise::Test…

Rails4 simplecovでテストカバレッジを調べる

specでテストを書いていますが、すべてのテストがかけているか不安だったので、カバレッジを調べることにした。simplecovというgemを使うといいようだ。Gemfileに次のように追記し、bundle install # カバレッジ gem "simplecov", require: false, group: :t…

Rails4 flashのメッセージが2回表示される

flashに設定したメッセージが2回表示されて困ったのでメモ。下記のようにflashにalertを設定し、newを再表示していた。 flash[:alert] = "登録に失敗しました。" render action: 'new' 登録画面で登録ボタンを押下すると、正常にメッセージが表示されたが、…

Rails4 Chart.jsでレーダーチャートの背景色をなくす

レーダーチャートで3つのデータを比較したかった。下記のように記載していたが、背景色があると、見にくいと感じました。 var radarChartData = { labels: <%= @labels.html_safe %>, datasets: [ { fillColor: "rgba(151,187,205,0.5)", // 線で囲まれた部…

印刷で改ページを指定する(PDF出力対応)

CSS

PDF出力時の改ページを指定したかった。 印刷で改ページを指定するのと同じ方法で対処できたのでメモ。 CSSで印刷時の改ページの位置を指定できるようだ。 page-break-before 要素の直前の改ページを制御 page-break-after 要素の直後の改ページを制御 制御…

Rails4 rake db:migrete実行前に戻す

マイグレーションファイルを作成し、rake db:migreteを実行した後、元に戻したくなった。下記のコマンドを実行すれば、ロールバックできた。 rake db:rollback 参考: rake db: migrate を rollback で元に戻す | deadwood

Rails4 scopeでの並び順指定

scopeで並び順を昇順と降順に指定する方法のメモ。 例えば、scoreで並び順を指定する場合、昇順と降順は下記のように指定する。 # 昇順 scope :order_score, -> { order(:score) } # 降順 scope :order_score_desc, -> { order(score: :desc) } 参考: Rails…

Rails4 アクション毎にレイアウトを変更する

アクション毎にレイアウトを変更しようとして、1度失敗したので、メモ。 下記の2つのレイアウトファイルを作成した。 app/views/layouts/basic.html.erb app/views/layouts/custom.html.erb indexにbasic.html.erbのレイアウト、showにcustom.html.erbのレイ…

Rails4 1つのモデルに対して複数の参照がある場合のdependent destroy

ユーザーの組み合わせを定義したモデルをつくり、複数の参照を設定していた。 dependent destroyを設定しようとして躓いたので、メモ。combinationモデルでは、user_idとpartner_idがuserモデルを参照しているものとする。当初下記のように記載していた。 us…

Rails4 date_selectにclassを指定する方法

date_selectにclassを指定したかったが、うまくいかなかった。 <%= f.date_select :deadline_at, order: [ :year, :month, :day ], use_month_numbers: true %> オプションとHTMLのオプションを別の{}で囲むとうまくいった。 <%= f.date_select :deadline_at…

Rails4 レイアウトの継承

レイアウトを管理者と一般ユーザー用に分けたかった。 コントローラーを継承するのではなく、レイアウトで分ける方法を見つけたので、メモ。app/views/layouts/application.html.erbに下記のように記載した。 <html> <head> <title>SampleProject</title> <%= stylesheet_link_tag "app</head></html>…

Rails4 Chart.jsでレーダーチャートの目盛ラベルを変更する

chart.jsで描画したレーダーチャートの目盛ラベルを変更するのに苦戦したので、その方法をメモ。 コントローラで、表示したい目盛ラベルを変数に代入する。 デフォルトと同じ @scale_label = "<%= value %>" デフォルトの目盛ラベルにPを付加する場合 @scale…

Rails4 scopeでActiveRecordを簡潔に

ActiveRecordを簡潔に書くことができるscopeのメモ。 scopeの定義 class User < ActiveRecord::Base scope :created_before, ->(datetime) { where("created_at < ?", datetime) } end scopeはクラスメソッドのようにも、インスタンスメソッドのようにも使え…

Rails4 chart.jsのレーダーチャートをwicked_pdfでPDF出力 ※windows未対応

chart.jsで描画したレーダーチャートをwicked_pdfを使って、PDF出力する手順のメモ。chart.jsで描画したレーダーチャートをwicked_pdfを使って、PDF出力しようとしたらうまくいかなかった。 wickee_pdf推奨のgem「wkhtmltopdf-binary」が更新されていないの…

Rails4 form_tagでactionとmethodを指定する

form_tagでactionとmethodを指定したかった。ルーティングは下記のように設定してあった。 resource :test, only: [:edit, :update] edit内で、form_tagを使用していたが、初期値では、methodがpostになってしまったため、自分でmethodにpatchを指定する必要…

Rails4 複数のチェックボックスの入力結果を配列で取得すると、不要な"0"が含まれる

ユーザーをグループ分けするときに、そのグループに所属するユーザーをチェックボックスで選択したい。複数のチェックボックスの入力結果を処理するときに、不要な"0"が取得できてしまったので、メモ。まずは、ビューでチェックボックスを実装 <% @users.eac…

文字列の前後の空白を削除する

stripで文字列の前後の空白を削除しようとしたら、全角スペースが削除されなかった。そこで、メソッドを自作することにした。 class String # 文字列前後の全角・半角スペースを削除 def strip_with_full_size_space! self.gsub!(/^[ \s]*(.*?)[ \s]*$/, '\1…

Rails4 アップロードしたファイルのテスト

前回、csvファイルをアップロードして読み込む方法を調べた。 Rails4 csvファイルをアップロードして読み込む - ayaketanのプログラミング勉強日記 そのテストをおこなうため、アップロードしたファイルのテスト方法を調べた。 fixture_file_uploadを使うと…

Rails4 csvファイルをアップロードして読み込む

ユーザーをCSVファイルから登録したかった。 csvファイルをアップロードして読み込む方法をメモする。 ルーティングの設定 アップロードするCSVファイルの指定画面と、CSVファイルの読み込み処理のルーティングを設定する。 config\routes.rbに下記のように…

rails4 Chart.jsでレーダーチャートの目盛りの数、目盛りの幅を指定する

Chart.jsでレーダーチャートをつくったが、目盛りの設定が反映されていないことに気が付いた。0~6の範囲のデータを表示するレーダーチャートを作成したい。 レーダーチャートのデータはすべて、3のデータとする。 下記のように目盛りの数、目盛りの間隔、目…

Rails4 タブを増やさずに、リンク先別タブで開く方法 target: "_new"

リンク先を別タブで開く方法として、target: "_blank"がある。 しかし、これだと、リンクをクリックするたびに、タブが増えてしまう。必要以上にタブを増やさずにリンク先を別タブで開く方法として、target: "_new"がある。 :tagrget => "_blank" <%= link_t…