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
で次のように設定を行うと解決します。
|
config.allow_unconfirmed_access_for = 2000.years |
ほかに、次の記述を devise で認証を行うモデルクラスに入れるという方法があります。 たとえば User クラスなど。
|
private def confirmation_period_valid? return true end |
意味を考えると 後者のほうが望ましいと思います。
confirmation_period_valid?
メソッド confirmation_period_valid?
は devise のモジュール Devise::Models::Confirmable
で定義されています。
Rails で 先般 クライアント から 基本のデータを Excel で入れられるようにしてほしい という依頼がありました。 編集を行うデータだったら編集画面を作って DB で管理したほうがいいことを伝えましたが、 どうしても Excel がいいそうで。 Excel は必要以上に多機能で、すべてのデータをそのままデータベースに反映するのが難しそうであることから止めておいた方がいいと伝えて、 Excel との インポート・エクスポート が容易な TSV で対応することとなりました。 そのときの方法を書いておきます。
TSV は 内容をコピーしてそのまま表計算ソフトに貼り付けることもできますし、表計算ソフトから TSV に貼り付けることもできるので、 Excel でも扱いやすいです。 データが欠損することがあるので、その点で注意が必要です。
環境
- Ubuntu 14.04 LTS
- Rails 4.1.8
- Ruby 2.2.2
方針
- TSV 取り込みの機能を task で作り、
rake
コマンド で取りこめるようにする。
rake db:seed
を行ったときに、 TSV を読み込むタスクを実行するようにする。
続きを読む Rails 4 : TSV から seed データ を入れる →
Magnum CI は 無料で使える CI 環境で、 きっと愛用している人も多いと思います。 本記事では、 Bitbucket で管理している Rails のコードを、 Magnum CI でテストした時のメモを書いておきます。
続きを読む Magnum CI で Rails をテストした方法 →
pik といえば、 windows で使える ruby の複数バージョン管理ツールです。 記事執筆時点で pik は github で No longer maintained
と書かれていまが、 私は使い慣れた pik を使います。
落とし穴
Windows 7 32bit で検証済み。
msi インストーラ を実行して windows にインストールするのですが、 そのままでは使えません。 ある意味バグが残っているので一部修正して使います。
まずは インストーラのページ から 記事執筆時点での最新版 pik-0.3.0.pre.msi をダウンロードして実行し、そのままインストールします。
設定を変更していなければ C:\pik
に pik に関するファイルがインストールされます。 その中の C:\pik\pik.bat
の 7行目 で %HOME%
になっているところを %USERPROFILE%
に変更します。
|
@ECHO OFF "%~dp0pik_runner.exe" "%~f0" %* IF "%PIK_HOME%"=="" ( IF EXIST "%USERPROFILE%\.pik\pik_run.bat" (call "%USERPROFILE\.pik\pik_run.bat") ) ELSE ( IF EXIST "%PIK_HOME%\pik_run.bat" (call "%PIK_HOME%\pik_run.bat") ) |
Windows では %HOME%
という環境変数は定義されていません。 (インストール先ディレクトリ から考えて) %USERPROFILE%
に変えればうまくいきます。 Windows 8.1 でも同じです。
Ruby On Rails のシステムの中でツールチップを表示しようと思ったときのメモです。
やることは単純で、クリックされたらヘルプを表示して、もう一度クリックされたらヘルプを隠すというものです。はてなマークがクリックされたらツールチップを表示・非表示するということです。
実装は javascript (jQuery) と CSS で行いました。そして Rails の helper に便利メソッドを作りました。以下がそのコード。
環境
- Ruby 1.8.7p374
- Rails 3.0.1
- jQuery 1.4.3
基本
|
.help-tooltip { max-width: 600px; background-color: #fff; display: none; z-index: 10; font-size: 12px; position: static; border: solid 1px black; padding: 2px; } |
|
$('.help-tooltip-trigger').live( 'click', function () { $(this).next().slideToggle('fast'); } ); |
上のように javascript と css を記述して、次のように HTML を書きます。
|
<span class="help-tooltip-trigger"> <img src="image/quotation.png" style="width:16px;height:16px;" /> </span> <div class="help-tooltip"> <p>ヘルプメッセージ</p> </div> |
image/quotation.png はクリックするモノです。その画像をクリックすると表示・非表示が切り替えます。
正確にいうなら、画像を囲んでいる span をクリックすると、その直後のタグの表示・非表示を切り替えます。つまりクリックするものは画像でなくてもよく、もっというならツールチップ以外にも使えるということです。
helper の活用
Rails には helper というものがあるので活用してみます。
|
def help_tooltip(message, size = '16x16') result = content_tag(:span, {:class => 'help-tooltip-trigger'}) do image_tag 'icons/question.png', :size => size end result += content_tag(:div, {:class => 'help-tooltip'}) do raw message end return result end |
このメソッドを次のようにして使うと、上に書いた HTML のように出力されます。
|
<%=help_tooltip '<p>ヘルプメッセージ</p>', '16x16'%> |
2番目の引数はデフォルト値を設定しており、引数がなくてもいいようにしています。
私がこの tooltip 表示を書き始めたら ほかの人が随所で真似し始めたので、もっと楽にできる helper のメソッドを作ったというお話でした。
A Life Summary of an Gypsy