Rails4の更新処理ではPATCHメソッドが使われている

Rails4の更新処理ではPATCHメソッドが使われている

みなさんこんにちは、新人の意識高丸です。
1週間あいてしまいましたが、毎週火曜日に開催されている初心者向けRuby勉強会「gaienrb」に参加してきました。
(http://www.circleaf.com/groups/13)
今回はrailsチュートリアルの9章をすすめていきました。
(http://railstutorial.jp/chapters/updating-showing-and-deleting-users?version=4.0#top)

久しぶりだったためか、つまづくところが多くあまり進みませんでした。

私の環境ではテストはguard+sporkで自動実行した結果をgrowlで画面に表示させているのですが、今回はユーザ認証のところでエラーがなかなか解消せず、多くの時間を消費してしまいました。
guardを再起動したらエラーが解消したので、おそらくモデルやroutesなどを追加/変更した場合はspokeで事前読み込みしたところが更新されないため、guardを再起動する必要があったのだと思います。

毎回再起動するのが面倒であれば、spec_helper.rbに以下のように記述することで自動で再読み込みするようにできるそうです

“`spec_helper.rb

Spork.each_run do

# This code will be run each time you run your specs.

load “#{Rails.root}/config/routes.rb”

Dir[“#{Rails.root}/app/**/*.rb”].each { |f| load f }

end

“`

これらのテスト用の環境について以下におさらいしてみます。

##spork
rails実行に必要なファイルを事前読み込みしてくれるもの
テストの実行が早くなります

##guard
テストを自動で実行してくれるもの

##growl
通知アプリで、guardと連携してソースコード書き換え->guardでテスト実行->growlで画面に通知という流れが自動でできる

そしてチュートリアルの方はというと、認証と認可のところを実装しました。
認証と認可は名前は似ていますが、以下のように意味は違うようです。

##認証
ユーザの正当性を識別する(ログインなど)

##認可
ユーザの権限を制御する(管理者と一般ユーザのできることを分けるなど)

混同して考えてしまうと痛い目を見そうな雰囲気を感じました。

実装の部分では以下のところがチュートリアル通りに動かなかったのですが、それは次の課題としたいと思います。
チュートリアルによると、更新の場合にはヘルパーが以下のhidden属性のinputを埋め込んで、PATCHメソッドに対応するそうですが、このinput要素が出てきませんでした。

“`
<form action=”/users/1″ class=”edit_user” id=”edit_user_1″ method=”post”>
<input name=”_method” type=”hidden” value=”patch” />
.
.
.
</form>
“`

railsはActiveRecordのnew_record?メソッドで新しいユーザかの区別を行い、POSTメソッドとPATCHメソッドを切り替えているようです。
以前のrailsでは更新にPUTメソッドを使っていたのですが、Railsのリソース更新は、多くの場合冪等(べきとう)ではないので、Rails4からはPATCHを使うようにしたそうです。
冪等というのは何度同じことをしても同じ結果になるということです。

今回は最初のテストではまったせいであまり進みませんでしたが、次回の勉強会までには課題も含めて解決したいと思います。

TAG

  • このエントリーをはてなブックマークに追加
意識 高丸
エンジニア 意識 高丸 takamaru

Rubyについて日々勉強している新人エンジニアです。初心者向けRuby勉強会のレポートなどを投稿していきます。