おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

rails

コントローラのテストでajaxリクエストを投げるには

通常のコントローラのテストでは、リクエストを投げるためにgetやpost等のメソッドを使います。ですがajaxを利用しているアクションでajaxのみ受け付けるように制限している(verify :xhr => true ...)場合、これらのメソッドではテストが通りません。このよ…

session fixation attackとCSRFのジレンマ

最近、Railsの認証プラグインのデファクトスタンダード(多分)であるrestful_authenticationを使い始めました。まだ少ししか触れてないですが、かなり便利そうな感じです。このプラグインは、認証に必要なコードを自動生成してくれるのですが、そこで少し気に…

Railsでlabelタグ

いつものようにメモ labelタグとは <label> は、フォームの中で、フォーム部品とラベルを関係付けるために用います。ラベルを明示することにより、ブラウザでラベルをクリックした時や、ラベルのアクセスキーを押した時に、その部品をクリックしたのと同じ…

ActionController::MethodNotAllowed

新しくviewを作ってアクセスしたらこんなエラー。 ActionController::MethodNotAllowedあとこんなような事も書いてあった。でも普通にブラウザからアクセスしただけなので getでアクセスしてるはず。おかしい。 Only get and post requests are allowed.調べ…

ruby-debugでデバッグ

Railsアプリのデバッグをするとき、僕は基本的にはpを使ってます。pだけじゃしんどそうだなーという場合も時々あって、そういう時にはruby-debugを使ってます。でも時々なので使い方をよく忘れます。これは効率悪いですね。というわけでruby-debugの使い方を…

h以外のサニタイズ系メソッド

Rails2.0からいろいろ追加されたみたいです。メモ。 strip_tags タグを全部取り除く。 例 strip_tags("Strip <i>these</i> tags!") # => Strip these tags! strip_links リンクのみ(つまりa要素だけ)取り除く 例 strip_links('<a href="http://www.rubyonrails.org">Ruby on Rails</a>') # => Ruby on Rails s…

RailsのURLエンコード方法

これまでは、ここを参考に URI.escape( str, Regexp.new("[^#{URI::PATTERN::ALNUM}]") ) でやってたけど ERB::Util.url_encode で十分みたいね。 参考 cgi - Rubyリファレンスマニュアル erb - Rubyリファレンスマニュアル

RailsアプリのRDoc関連コマンド

RDoc関連のrakeを調べたのでメモ。 Railsアプリ appで新規作成、reappで更新、clobber_appで削除 rake doc:app rake doc:reapp rake doc:clobber_app Rails本体 ルールは上のやつと同じ。ここみたほうが早いので使う機会はなさそう。 rake doc:rails rake do…

カラムを追加/削除するマイグレーションファイルを自動生成

これまで、modelと一緒に自動生成されるもの以外の、カラムを追加する類いのマイグレーションファイルは手書きしていたんだけれど、どうやらrails2.0以降はこれも自動化できるみたい。というわけでやり方をメモ。 追加するとき 例 こんな風に書くと script/g…

helperモジュールは一つだけ定義していればいいのかもしれない

これまで、例えばHogeControllerと関連しているviewファイル内なら、HogeHelperとApplicationHelperしか使えないんだろうなーと思ってたのですがどうやら違うようです。調べたところ、rails2.0からはどのviewファイルでも全てのヘルパーメソッドが使えるよう…

Award on rails 2008のレンタルサーバっていつ使えるの?

こないだ、Award on rails 2008にエントリーをしました。自分用のツールを作ろうかなーと思っています。 エントリー時に「レンタルサーバ使いたい!」と言うと期間中は無料で貸していただけるそうです。僕はもちろんサーバ使いたいのですが、今日になっても…

Railsのfilterが途中で終了する条件についてメモ

下記のくまくまーさんのエントリを見て、へーなるほどと思ったんだけど。 コントローラを継承している場合、親クラスのコントローラで定義された Filter が先に実行されます。また、Filter を評価した値(戻り値)が false である場合、その時点で Filter の適…

Railsで同じviewを使い回す時に知って得するメソッド4つ

リファレンスを見てたら偶然見つけたメソッドが使えそうだったのでまとめておきます。同じviewテンプレートを複数のアクションで使い回す時に使えます。 current_page? 指定したURLが、現在表示されていればtrueを返します。 例 # main#indexならtrue curren…

Railsのフォーム作成メソッドform_tagとform_for

form_tagとform_forの引数がいつもごっちゃになってしまうのでメモっておきます。 form_tag フォーマット form_tag(url_for_options = {}, options = {}, *parameters_for_url, &block) 例 (2008/7/22修正しました) form_tag { :controller => "user", :acti…

sqliteはlimitが効かない

migrationファイルでこんな風に書いたときに、sqliteだと5文字以上入力できてしまった。mysqlだと5文字以上入力したときに5文字以降は切り捨てられた。とりあえずメモっとく。 create_table :people do |t| t.string :name, :limit => 5 end

Railsでログイン状態を保持する方法

(6/20 大幅に加筆修正を行いました)Railsのセッションの有効期限は、デフォルトだとブラウザが終了するまでです。これだと、ログインページによくある「ログイン状態を保持する」チェックボックスが作れません。というわけで、やり方を調べてみたら、よさそ…

Railsのオプションでwith

with繋がりでエントリ*1。 with文 - おもしろWEBサービス開発日記Railsでwith_optionメソッドを使うと、引数の最後に共通で使うオプションの引数を指定できます。 例 map.with_options(:controller => 'main') do |main_map| main_map.login 'login/', :acti…

after_filterの実行タイミングではまった

after_filterは、各アクションのrenderの後に実行されるようです。下記でhogeアクションを実行するとActionController::DoubleRenderErrorになります。 class HogeController < ApplicationController after_filter :render_test def hoge end end class App…

railsのクッキーとセッションについてまとめ

こないだ、よくわからんので今度調べると書いたところについて。CSRFの対応について、rails使いが知っておくべきこと - おもしろWEBサービス開発日記まずクッキーとセッションの違いから。自分の認識はこんな感じ クッキーもセッションも、ブラウザにデータ…

CSRFの対応について、rails使いが知っておくべきこと

以前、CSRFについてのエントリを書きました。CSRFについて - おもしろWEBサービス開発日記上記エントリではCSRFの概念について書きましたが、もう少しつっこんで調べる必要が出てきました。調べたことを書いてゆきます。 基礎 application.rb(ないし適当なCo…

広い視野を持ってアルゴリズムを決めるべき

今日どうしようか悩んだところをメモ。 背景 nameとcount属性を持つモデルHogeがあるとして、nameが存在していればcountを1増やし、nameがなければ新しく作ってsaveするメソッドincreaseを作るとする。この時に、Hogeの初期のcountを1にするか0にするかでア…

ActiveRecord復習その3

ようやくリレーションについて。 belongs_to, has_one, has_manyの基本 今日読んだ範囲では特に新しいことはなかった。 has_and_belongs_to_many has_and_belongs_to_many(habtm)は利用シーンがすごく限られていて、覚えていてもあんまり使えないんじゃない…

ActiveRecord復習その2

昨日に引き続きメモActiveRecord復習 - おもしろWEBサービス開発日記 オブジェクトをDBに直接保存する方法その1 text列を持ったテーブルを作る Model定義内に下記のように書く serialize :column_name あとは普通に保存したり呼び出したりできる。ちなみにD…

マトリクスURL

railsでマトリクスURLサポートして欲しいなー

ActiveRecord復習

リレーション関連がうまく使いこなせていないので、railsによるアジャイルwebアプリケーション開発を読み返してみた。勉強になったことをメモメモ。 テーブル情報の取得 下記のようなマイグレーションでpeopleテーブルが定義されているとして、 create_table…

コード読みたい

そろそろrailsのコードを読む必要がありそう。

railsのfixture作成を簡単にする方法

(2008/09/12修正) railsでテストをするときに、fixtureの定義をしなくてはならないことが多々あります。 テーブルが少ないときは手で一つずつ書いていってもいいのですが、テーブルが多いととても大変です。そこで簡単にfixtureを作る方法はないものか調べて…

edge railsでのgem依存性の記述方法

こないだのrails勉強会のrakeセッション時に、edge railsで新しく導入されたrake rake gems:install でインストールすべきgemをenvironment.rbにどのように記述するか? という話になって、結局ビネガーなシンタックス*1でできたけどもっと簡単な書き方ある…

rails勉強会第29回に参加しました(後半)

Rails' Wiki - Rails勉強会@東京第29回後半はrakeについてです。 edgeで追加されたrake 2.0から追加されたrake を中心に、rakeを一通り見てゆきました。まず、 rake rails:freeze:edge でedgeをインストール。 edgeで追加されたrake edgeでは、migrationフ…

rails勉強会第29回に参加しました(前半)

日曜はrails勉強会に参加してました。 Rails' Wiki - Rails勉強会@東京第29回というわけでメモ。前半のセッションはgitについてでした。 git(ギット)のインストール/特徴など じっとって読むと思ってました>< 無線LANが使えない環境だったので、自分では…