SORA.GetOutput()

備忘録と捌け口とシェアと何か。

独自に追加したjsファイルの内容が、ページ表示時に反映されない時の解決法

症状

タイトルの通り、hogehoge.jsファイルをjavascriptsファイル内に格納しているとき、ページ初回読み込み時ではなくページリロード時にそれらjsの内容が初めて読み込まれます。

解決策

qiita.com

毎度、Qiitaさんお世話になります(`;ω;´)

Bootstrapに対応したflashメッセージを出力する

失敗するパターン

flash[:success]等を使わずに、redirect_toから直接flashメッセージを出力すると失敗します。

redirect_to @hogemodel, success: 'Hoge Model was successfully created.'

解決策①

王道ですが、flashを使ってあげればOKです。

flash[:success] = 'Hoge Model was successfully created.'
redirect_to @hogemodel

解決策②

上記解決法もアリですが、やはりredirect_toでスマートに書きたい→Qiitaにまさに求めている答えがありました。

qiita.com

redirect_toからのflashメッセージは、デフォルトでは:noticeと:alertしか設定できないようになっているようです。application_controller.rbに以下を追加すれば使える様になります!

class ApplicationController < ActionController::Base
  add_flash_types :success, :info, :warning, :danger #これ!!!
end

もちろん、使用したいコントローラを制限したいときはapplication_controller.rbではなく対象となるコントローラに上記記載すれば大丈夫です。

Ruby on Railsサーバに他のマシンからアクセス出来ない場合の対処法

ハマったのでメモ。
※以下、RailsサーバのIPアドレスをx.x.x.xとします。

いつもの方法

rails s

http://localhost:3000OK
http://x.x.x.x:3000NG

この方法では他のマシンどころか、Railsサーバ上からも自分のIPアドレスでアクセスできませんでした。

他のマシンからもアクセス

rails s -b x.x.x.x

http://localhost:3000NG(Railsサーバ上でもIP直打ちする必要あり)
http://x.x.x.x:3000OK

なんのことはない、起動時のオプションでIPアドレスを指定すればいいだけでした。 こうするとRailsサーバ上でlocalhostを指定してもアクセスできなくなるので、必ずIPでアクセスするようにします。

余談

ブログの語調をですますにかえました。

CODE COMPLETE (上) 読破

CODE COMPLETE

リーダブルコードと合わせ、プログラマーのバイブルとも呼べる本。
本の中で登場するノウハウは、特定言語に依存したものではなくユニバーサルに使用できるものとなっており、上巻では「基礎固め」「コードの品質」「変数」「ステートメント」について扱っている。

www.amazon.co.jp

感想

コンピュータサイエンスの授業をまじめに受けた人や品質の高いプログラムを生み出す職場にいる人なら、息を吸うように自然と実践しているような内容が中心だったが、この本のいいところはそういった経験のある・なしにかかわらず、沢山のグッドプラクティスを改めて網羅的に確認できる点にあると思う。
自分的には「なるほどそうなのか。」というよりも「そうだよね、うんうん。」と思う部分が半分以上を占めていたが、バリケードによるエラー被害の囲い込みやテーブル駆動方式など、有意義な収穫もたくさんあったので買ってよかった。
上巻だけで628ページもあるので読み込むには覚悟がいるが、下巻も頑張って読破しよう。

Rubyで不等号を使った時間比較に気をつける

Ruby on Railsチュートリアルで、これは覚えておかないといつか間違えそうだと思った時間比較があったのでメモ。

以下のコードの意味

#reset_sent_atはDateTime型
reset_sent_at < 2.hours.ago

これは、「reset_sent_at2時間以上前か」どうかを比較している。不等号の意味を額面通りに取ると、「reset_sent_atが2時間より小さいか=2時間以内か」となり、正反対の意味になってしまうので注意。

Rubyメタプログラミング 最初の一歩

メタプログラミング

ざっくり言うとプログラムでプログラムを作る。
Rubyメタプログラミングの柔軟性が強力すぎるゆえ、
Ruby on Railsはじめ色んな所で「黒魔術」と呼ばれている。

実際どんなの?

sendメソッドを使用し、引数にオブジェクトが持つメソッドの名前を添えることでそのオブジェクトのメソッドを呼ぶことができる。

a = 10
# => 10

a.to_s # 文字列化する
# => "10"

a.send(:to_s) # sendメソッドでto_sメソッドを呼び出す ★a.to_sと全く同じ
# => "10"

a.send("to_s") # sendメソッドにはシンボル・文字列どちらも使える ★a.to_sと全く同じ
# => "10"

何が嬉しいの?

これが威力を発揮するのはsend()の中身を実行時にイジる時。

a = 10
# => 10

method = :to_s # 変数に呼び出したいメソッド名の文字列を格納する。
a.send(method) # a.to_sが実行される。
# => "10"

method = :next
a.send(method) # 変数の内容変更に伴い、今度はa.nextが実行される。 (nextは次の整数を返すメソッド)
# => 11

method = "to_s"
a.send(method) # シンボルと文字列両方使えるが、シンボルを使うのが慣習みたいだ。
# => "10"

このように、a.send(method)という部分を全く変えずに、実行時に外部からその動作を定義することができる。