maeshimaの日記

メモ書きです

rails

seeds.rbについて雑感

seeds.rbはmigrationにデータを変更するコードを書くのをやめよう!という思想が入ってるらしいけど、データの初期化はともかく、運用途中でデータを変更するのは結構めんどそう。マスタデータ変更系でもseeds.rb使った方が良いんだろうかRails 2.3.4で追加…

auto_link

Rails3.0.6ではauto_linkの脆弱性が修正されたらしい。auto_linkは文字列中にあるURLやメールアドレスにaタグ付けて返すメソッド。あんまり使わないから忘れがちなんだけどこの際覚えよう。 post_body = "Welcome to my new blog at http://www.myblog.com/.…

空文字をカラムに代入したときの挙動

textやstringのカラムに空文字代入して保存したときにnilになるのか空文字になるのかよくわかってなかった。空文字代入のときは空文字が保存されるみたいね。integerや datetime は空文字代入したら nil になる(当たり前だけど)。

ASCIIcasts - Decent Exposure

ASCIIcasts - “Episode 259 - Decent Exposure”を読んで。decent_exposureという、コントローラでインスタンス変数に値をセットする部分を簡単にするgemについての記事。 def show @article = Article.find(params[:id]) end のような、コントローラ中に書く…

Paperclipのstyleの記述方法

resizeだけ指定したいときは文字列だけでいい has_attached_file :avatar, :style => {:large => "640x640>"} 拡張子を指定しないといけないときは配列 has_attached_file :avatar, :style => {:large => ["640x640>", "jpg"]} ハッシュでもいい。ハッシュだ…

PaperClip::ClassMethods#has_attached_file

ドキュメントの意訳。has_attached_fileはクラスにファイル用の属性を追加する。通常はどこかに置いてあるファイルか、もしくはユーザがアップロードしたファイル。その属性はPaperclip::Attachementオブジェクトを返す。これによってファイルをモデルの普通…

datetime形式の入力を厳密にチェックしたい場合

datetime形式のパラメータは params[:hoge][:date(1i)], params[:hoge][:date(2i)], params[:hoge][:date(3i)] のように分かれてくる。このパラメータをmass assignmentでdatetime形式のカラムの属性に代入すると、railsが気を利かせて解釈してくれてDateTim…

ActiveRecored::Base#save!についての雑感

これまでActiveRecored::Base#save!を多用してたけど、複数のモデルを一度に保存する場合、save!だと一つの「モデルのバリデーションしか行われない→エラーメッセージが一部しか表示されない」という弊害があるな。そういうときはsaveメソッドを使うといいね…

after_validation

validateの後に実行されるコールバック。validate中にエラーチェックに引っかかる項目があっても実行される。エラーをチェックする条件が複雑なものを別メソッド(やモジュール)に出して、validationするタイミングは同じにしたいようなときに使える・・・と…

migration中に変更したカラムを使いたい場合

ActiveRecord::Base#reset_column_informationを実行して、カラムの情報を一度リセットしないとエラーになってしまう。下記のソースはrailsのドキュメントからの引用。 class CreateJobLevels < ActiveRecord::Migration def self.up create_table :job_leve…

今週のRailscasts - Decent Exposure

Railscasts - Decent Exposureを見て。下記のような、よくコントローラ中に書かれる、インスタンス変数にオブジェクトを代入する処理をまとめてかけてDRYにするgem。 @articles = Article.all ざっと見た感じではなかなか使えそうな気がした。コントローラを…

validates_uniqueness_ofを付けるときにはDBのindexにもunique制約つけるべき

メモ。validates :uniquenessはuniquenessを保証しないのでDBにindexをつけましょう!

renderのオプション

fileの方はデフォルトでlayoutが適用されない templateの方はデフォルトでlayoutが適用される render :file => "hoge/fuga" render :template => "hoge/fuga"

ポリモーフィック関連

ポリモーフィック関連 - maeshimaの日記

バリューオブジェクト

一つのモデル内にたくさんのカラムを設定する時なんかには使えそう? バリューオブジェクト - maeshimaの日記

after_initialize, after_find

メソッドを定義しておくと、それぞれnewしたとき、findしたときの挙動をフックできるらしい after_initializeに関して - カノ エ ノ メモ - cucumberグループ

controller内でviewのメソッドを使う方法

ドキュメント見た限りではRails3限定っぽい。view_contextメソッドにチェーンするとcontroller内でもviewのメソッドが使える view_context.link_to("hoge", ...) 参考 Railscasts - Undo with Paper Trail

verify

verify - maeshimaの日記

Array#wrap

railsで拡張されてるメソッド。引数がArrayじゃない場合に配列でラップして返す。

railsの脆弱性

Riding Rails: CSRF Protection Bypass in Ruby on Railsを読んで。ざっくりメモ。 CSRFの脆弱性あり 2.3.11にあげると、これまでCSRFのチェックで500になってたのが session reset に変更になる handle_unverified_requestメソッドをオーバーライドすると挙…

rails_footnotes

以前入れてみて、でもなぜかうまくいかなくて放置していた。理由は environments をdevelopment以外にしていたから。ENABLE_RAILS_FOOTNOTES = trueとするとdevelopment以外でも使うことが出来た。 explain rails_footnotesの機能に、「実行したクエリの exp…

Rails3でオブジェクトをキャッシュする

Nathan Humbert's Blog: Easy data caching in Rails 3を見て。Rails3では下記のようにすることでキャッシュを保存/取得できるみたい。便利かも # "hoge" の key でキャッシュに保存されていなければ "hogehoge" がキャッシュにセットされて返る Rails.cach…

今週のRailsCasts - Notifications in Rails 3

Rails 3 から追加された AcriveSupport::Notifications を使って、通知を実装する話。Railscasts - Notifications in Rails 3 Notifications in Rails 3 Module: ActiveSupport::Notifications 使い方 config/initializers 配下にファイルを作って定義する。…

今週のRailsCasts - Offline Apps Part 2

前回に引き続き、動的ページをオフラインで表示するにはどうするのかという問題。Railscasts - Offline Apps Part 2 ASCIIcasts - “Episode 248 - Offline Apps Part 2” 方法1 manifestのハッシュ値をアクセス毎に変更する この方法だとキャッシュしておきた…

paperclip課題

I18nに対応してない 気を利かせてmessageオプションを下記のように設定するとエラーになる。理由はgsubで:max, :minを置換しようとしているから。イケてない・・・ validates_attachment_size :image, :less_than => 1.megabytes, :message => :"hoge" valid…

thor

ASCIIcasts - “Episode 242 - Thor”を見て。メモ。 Rakeの短所 引数渡す方法が、環境変数しかない>< Rakeタスクは簡単にはグローバルに出来ない。基本的にローカルのプロジェクトでしか使えない。 Sakeとかいうツールを使えばその辺何とかなるけど、追加の…

Nested Transaction

下記エントリで理解したとか書いてたけど理解できてなかった><nested transaction - maeshimaの日記下記エントリ見てようやく理解。子のtransactionに入る前にsavepointをつけて、エラーが起きると対応するsavepointに戻る。Rails 2.3 の Nested Transacti…

railscasts - Simple OmniAuth

ASCIIcasts - “Episode 241 - Simple OmniAuth”を見て。OmniAuthを単体で組み込んでTwitterでユーザ登録&ログインできるようにする話。それほど難しい話はなかった。 気になったところ 複雑な構造のhashオブジェクトをデバッグしたいときにはto_yamlすると…

エラー通知用のライブラリ

ASCIIcasts - “Episode 187 - Testing Exceptions”を見たら結構便利そう。今度試したい。 exception_notifiation シンプルな通知ライブラリ。Rails3にも対応してるみたい。 rails's exception_notification at master - GitHub exception_logger メール通知…

エラーメッセージのフォーマットを変えたい場合

Rails2.3の話で、Rails3でも同じかは未確認です。通常のエラーメッセージは「エラーになった属性の名前 + validation固有のメッセージ」。これを変えたい場合、localeのファイルで"activerecord.errors.full_messages.format"を修正することで変えることが出…