baronyan's blog

linux,macでruby、railsでの開発をしていく中で知ったこと、備忘的なことなどを書いていきます。

Rails

ActiveAdminをカスタマイズしてDBレコードのcsv書き出しと取り込みを簡単にできるようにしてみました。

Railsアプリの管理画面を簡単に作成できるActiveAdminというgemがあります。 このgemはかなり便利で、crud操作はもちろんのこと、便利な検索(Filter)や、 csv、xml、jsonでのダウンロード機能も提供してくれます。さらにactive_admin_importableというgem…

ActiveRecord経由でidを付け替える方法

book = Book.find(1) book.id = 35 book.saveとするとidを変更できそうなものですが、uniqueness制約を付けている場合、 そのuniquenessカラム群がユニークであるにも関わらず、自分自身を指して 「uniquenessカラムが同じで別idのレコードが存在する」と更…

helper抜粋(rails4.1.4)

NumberHelper アクティブサポート(activesupport) - RailsドキュメントTextHelper アクティブサポート(activesupport) - Railsドキュメント

helperメソッドをview以外から呼ぶ

ApplicationController.helpers.メソッド例:ApplicationController.helpers.number_to_human_size(filesize) → ○○ MB

ActiveModelのカラム名一覧を取得するメソッド

モデルクラス.attribute_names またはモデルクラス.column_namesとすることで、カラム名が配列で返却されます。

ActionMainlerで日本語を使う

mail-iso-2022-jp というgemが便利です。Gemfileに登録してbundle installで読み込んだら 後はmailクラスでrequireするだけです。

railsのログのカラー表示(ANSIカラーコード)を止める

ログのカラー表示は見やすくてとても便利です。 ただ、stdoutではカラー表示されるのですが、logファイルをview等で見た場合、カラーコードが文字列として表示されてしまい、見づらいものとなります。カラー表示を止めたい場合には、config/application.rbに…

railsでDateクラスを検索条件に使う方法

railsのActiveRecordでdatetime型を検索する場合、検索条件には TimeインスタンスかActiveSupport::TimeWithZoneインスタンスが指定できます。日付の区切りを指定したい時などにDateインスタンスを条件に使えると便利なのですが、 こちらはActiveRecordの検…

utcで保存しているDATETIMEカラムの中身をJST(Tokyo)で表示する方法

.in_time_zone('Tokyo') を使って都度JSTに変換します。例 Book.updated_at.in_time_zone('Tokyo').to_s

rails上でカラムの型を取得する

Bookを、booksテーブルを表すActiveRecordモデルだとすると、 Book.columns_hash['isbn'].typeで、isbnカラムの型を取得できる。戻り値はシンボルで、 :string :integer :float :datetimeなどがある。

ActiveRecordeのwhereメソッドでlikeを使う

Book.where('tag = ?', tag_b)これを↓こうするとlikeが使えます。Book.where('tag like ?', "%#{tag_b}%") Book.where("tag like '%?%'", tag_b) とか Book.where('tag like ?', tag_b) とかだと動きません。 直感的じゃないのでwhere以外で実現した方が良い…

webrickを使っていて遅いと感じた時の対処方法

~/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/1.9.1/webrick/config.rb を編集し、名前解決できるようにします。 修正後 :DoNotReverseLookup => true 参考:http://blog.setunai.net/20121120/webrickrails%E3%81%8C%E9%81%85%E3%81%84/

rails3.0.3でログにタイムスタンプを表示する方法

今私が運用中のアプリの中に、rails3.0.3ベースのものが2つあります。 railsのデフォルトのロガーはなんと日時を表示してくれず、 障害発生時に困ることがしばしばでした。 そこで、ログに日時が表示されるようにカスタマイズしてみました。 rails標準のログ…

rails3のAR(Arel)でIN句を使った条件をAND、ORで連結する方法

rails3のAR(Arel)でIN句を使った条件をAND、ORで連結する方法 AND、ORを使わずにIN句を使うには、下記のように第二引数で配列を指定すれば良いです。簡単ですね。scope :magazine, where("type_id in (?)", BookType.has_magazine_code.map{|ele| ele.id }…