「コード」カテゴリーアーカイブ

Rails application.js を application.js.coffee や application.js.erb にする


よく忘れることなのでメモしておきます。

application.js.coffee

Rails では あらかじめ application.js が用意されていますが、 これを coffeescript の形式にしたいと思うことがよくあります。 そういうときは次のように 上部のコメントアウト //# に書き換えます。

最後の require_tree は意図的に無効にしています。 余計な javascript まで読み込むので。

こちらは Rails 4.2.5, Ruby 2.0.0 で動くことを確認しています。

また、 Rails の変数・定数を使いたい場合に application.js.erb にしたこともあります。


Ruby 小数点以下第n桁で切り捨てる方法


Ruby で 小数点以下第n桁で切り捨てる方法をメモしておきます。

0.81235 などのリテラル (Float) には floor という関数があり、 小数点以下の切り捨てが可能ですが、 小数点以下の桁を残して切り捨てることはできません。

環境

  • Ruby 2.2.3p173
  • OS: Ubuntu 15.04
続きを読む Ruby 小数点以下第n桁で切り捨てる方法

Rails: Cells 3 から Cells 4 への アップグレード時に遭遇したエラー


gem の Cells 3 を Cells 4 にアップグレードした際に遭遇したエラーと対処法を記録しておきます。 すべてではないです。 ここにある対処法は、 それぞれの Cell クラス に対して行ってもいいですが、 ApplicationCell という親クラスを作ってそこに書き込むのが楽です。

対処した最終結果は Rails: Cells 3 から Cells 4 へのアップグレード に記載しています。

helper_method がないというエラー

lib/devise/controllers/helpers.rb で次のようなエラーが出ます。 そのとき私が使っていた devise のバージョンは 3.5.2 です。

undefined method `helper_method’ for XyzCell:Class

Cell クラス に次のコードを追加します。

なにもしないメソッドですが問題ありません。 Cells 3 の時は self.helper_method を呼ぶ必要があったのですが、 Cells 4 からは 使わなくてもよくなり、 メソッドも削除されたそうです。

参考: apotonick/cells Issue Not working with react-rails

dom_class でエラー

次のようなエラーが出た場合。

undefined method `dom_class’ for #<XyzCell:0x007ff36d4fecb0>

Cell クラス に 次のコードを追加します。

参考: apotonick/cells Troubleshooting

数字の3桁区切り number_with_delimiter がなくてエラー

Cell クラス に include ActionView::Helpers::NumberHelper を追加します。

select タグ が使えなくてエラー

次のようなエラーメッセージが出ます。

private method `select’ called for #<XyzCell:0x007ff48f4febe8>

Cell クラス に include ActionView::Helpers::FormOptionsHelper を追加します。

参考: apotonick/cells Issue select form_helper doesn’t work in cells 4


Rails: Devise エラー undefined method `failure_app’ for nil:NilClass の対処法


API を作っていたとき、 次のようなエラーが出ました。 原因は devise gem でした。

NoMethodError (undefined method `failure_app’ for nil:NilClass)

環境

  • Ruby 2.2.3p173
  • Rails 4.2.4
  • devise 3.5.2

原因

unauthorized のユーザに対して sign_in を実行していました。

作成中の API では、 いちいちメールの確認をしなくてもログイン・利用はできるようにしておく方針だったため、 メール未登録のユーザでもログインする処理を記述していました。 そのため、 通常なら warden の上で unauthorized とみなされるユーザについてもログイン処理を行っていました。

対処法

config/initializer/devise.rb で次のように設定を行うと解決します。

ほかに、次の記述を devise で認証を行うモデルクラスに入れるという方法があります。 たとえば User クラスなど。

意味を考えると 後者のほうが望ましいと思います。

confirmation_period_valid?

メソッド confirmation_period_valid? は devise のモジュール Devise::Models::Confirmable で定義されています。