自作Webサービスhttp://sampler.wackwack.netをRails3からRails4へ移行しました。
その中でstrong_parametersの対応を行ったので、Web上に山ほど情報は転がっていますが内容についてまとめておきます。
簡単に言うと
DBへの登録処理を行うにあたっての設定方法が変わったようです。
Rails3での設定
Rails3では単にモデル作ってコントローラに実装すればOK、ではなく、モデルに対して「ユーザから渡されたパラメータで更新可能なカラム」を設定しておく必要がありました。
それを行うのがattr_accessibleでした。
例えば、モデルUserがカラムname、password、addressを持つときに、各カラムについて登録・更新を可能にするためには、以下の設定が必要です。
class User < ActiveRecord::Base attr_accessible :name, :password, :address end
このattr_accessibleで指定されていないカラムについては、登録・更新できません。
Rails4ではどうなるか
Rails4では上記attr_accessibleが廃止になり、strong_parametersという仕組みが導入されたようです。概要は大きく変わらないと思いますが、strong_parametersではコントローラ内で各カラムへの操作権限を設定します。
先ほどのUsersの例を取ると以下のような感じになります。
#params[:user]に画面で入力した値が入っている permit_param = params.require(:user).permit(:name,:password,:address) @user = User.new(permit_param) @user.save
ActionController::Parameters#requireにパラメータハッシュのキーを指定し、ActionController::Parameters#pemitで更新を許可するパラメータ名を指定します。
ちなみに、permitを使って全部のパラメータ指定するの面倒!という時は、こんなかんじでまとめて処理できます。
@user = User.new(params.require(:user).permit!) @user.save
それと、config/application.rb内のattr_accesibleに関連するパラメータ値を削除する必要があります。
#config/application.rb # config.active_record.whitelist_attributes = true
とまぁざっくりこんな感じです!
Rails4.0に含まれる strong_parameters について - おもしろwebサービス開発日記
http://memo.yomukaku.net/entries/sNBzYUI
Rails4のstrong_parameters覚え書き | ユニキャストラボ
ActionController::Parameters
- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/06
- メディア: 大型本
- この商品を含むブログ (8件) を見る
- 作者: Yugui
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/06/26
- メディア: 大型本
- 購入: 27人 クリック: 644回
- この商品を含むブログ (251件) を見る