rails
seeds.rbはmigrationにデータを変更するコードを書くのをやめよう!という思想が入ってるらしいけど、データの初期化はともかく、運用途中でデータを変更するのは結構めんどそう。マスタデータ変更系でもseeds.rb使った方が良いんだろうかRails 2.3.4で追加…
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 - “Episode 259 - Decent Exposure”を読んで。decent_exposureという、コントローラでインスタンス変数に値をセットする部分を簡単にするgemについての記事。 def show @article = Article.find(params[:id]) end のような、コントローラ中に書く…
resizeだけ指定したいときは文字列だけでいい has_attached_file :avatar, :style => {:large => "640x640>"} 拡張子を指定しないといけないときは配列 has_attached_file :avatar, :style => {:large => ["640x640>", "jpg"]} ハッシュでもいい。ハッシュだ…
ドキュメントの意訳。has_attached_fileはクラスにファイル用の属性を追加する。通常はどこかに置いてあるファイルか、もしくはユーザがアップロードしたファイル。その属性はPaperclip::Attachementオブジェクトを返す。これによってファイルをモデルの普通…
datetime形式のパラメータは params[:hoge][:date(1i)], params[:hoge][:date(2i)], params[:hoge][:date(3i)] のように分かれてくる。このパラメータをmass assignmentでdatetime形式のカラムの属性に代入すると、railsが気を利かせて解釈してくれてDateTim…
これまでActiveRecored::Base#save!を多用してたけど、複数のモデルを一度に保存する場合、save!だと一つの「モデルのバリデーションしか行われない→エラーメッセージが一部しか表示されない」という弊害があるな。そういうときはsaveメソッドを使うといいね…
validateの後に実行されるコールバック。validate中にエラーチェックに引っかかる項目があっても実行される。エラーをチェックする条件が複雑なものを別メソッド(やモジュール)に出して、validationするタイミングは同じにしたいようなときに使える・・・と…
ActiveRecord::Base#reset_column_informationを実行して、カラムの情報を一度リセットしないとエラーになってしまう。下記のソースはrailsのドキュメントからの引用。 class CreateJobLevels < ActiveRecord::Migration def self.up create_table :job_leve…
Railscasts - Decent Exposureを見て。下記のような、よくコントローラ中に書かれる、インスタンス変数にオブジェクトを代入する処理をまとめてかけてDRYにするgem。 @articles = Article.all ざっと見た感じではなかなか使えそうな気がした。コントローラを…
メモ。validates :uniquenessはuniquenessを保証しないのでDBにindexをつけましょう!
fileの方はデフォルトでlayoutが適用されない templateの方はデフォルトでlayoutが適用される render :file => "hoge/fuga" render :template => "hoge/fuga"
ポリモーフィック関連 - maeshimaの日記
一つのモデル内にたくさんのカラムを設定する時なんかには使えそう? バリューオブジェクト - maeshimaの日記
メソッドを定義しておくと、それぞれnewしたとき、findしたときの挙動をフックできるらしい after_initializeに関して - カノ エ ノ メモ - cucumberグループ
ドキュメント見た限りではRails3限定っぽい。view_contextメソッドにチェーンするとcontroller内でもviewのメソッドが使える view_context.link_to("hoge", ...) 参考 Railscasts - Undo with Paper Trail
verify - maeshimaの日記
railsで拡張されてるメソッド。引数がArrayじゃない場合に配列でラップして返す。
Riding Rails: CSRF Protection Bypass in Ruby on Railsを読んで。ざっくりメモ。 CSRFの脆弱性あり 2.3.11にあげると、これまでCSRFのチェックで500になってたのが session reset に変更になる handle_unverified_requestメソッドをオーバーライドすると挙…
以前入れてみて、でもなぜかうまくいかなくて放置していた。理由は environments をdevelopment以外にしていたから。ENABLE_RAILS_FOOTNOTES = trueとするとdevelopment以外でも使うことが出来た。 explain rails_footnotesの機能に、「実行したクエリの exp…
Nathan Humbert's Blog: Easy data caching in Rails 3を見て。Rails3では下記のようにすることでキャッシュを保存/取得できるみたい。便利かも # "hoge" の key でキャッシュに保存されていなければ "hogehoge" がキャッシュにセットされて返る Rails.cach…
Rails 3 から追加された AcriveSupport::Notifications を使って、通知を実装する話。Railscasts - Notifications in Rails 3 Notifications in Rails 3 Module: ActiveSupport::Notifications 使い方 config/initializers 配下にファイルを作って定義する。…
前回に引き続き、動的ページをオフラインで表示するにはどうするのかという問題。Railscasts - Offline Apps Part 2 ASCIIcasts - “Episode 248 - Offline Apps Part 2” 方法1 manifestのハッシュ値をアクセス毎に変更する この方法だとキャッシュしておきた…
I18nに対応してない 気を利かせてmessageオプションを下記のように設定するとエラーになる。理由はgsubで:max, :minを置換しようとしているから。イケてない・・・ validates_attachment_size :image, :less_than => 1.megabytes, :message => :"hoge" valid…
ASCIIcasts - “Episode 242 - Thor”を見て。メモ。 Rakeの短所 引数渡す方法が、環境変数しかない>< Rakeタスクは簡単にはグローバルに出来ない。基本的にローカルのプロジェクトでしか使えない。 Sakeとかいうツールを使えばその辺何とかなるけど、追加の…
下記エントリで理解したとか書いてたけど理解できてなかった><nested transaction - maeshimaの日記下記エントリ見てようやく理解。子のtransactionに入る前にsavepointをつけて、エラーが起きると対応するsavepointに戻る。Rails 2.3 の Nested Transacti…
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"を修正することで変えることが出…