strong_parametersへの対応

自作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

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

初めてのRuby

初めてのRuby