Rails4のStrong Parametersに関するメモ。新しくrailsのプロジェクトを作成し、rails generate 〜 すると自動生成されたController内がRails3系の時と変わっていた。生成後のArticlesControllerの一部。コメント等は削除しています。このArticlesControllerはブログのタイトル(title)と記事(content)だけを管理するシンプルなもの。
[cc lang=”rails” height=”580″]
class ArticlesController < ApplicationController
before_action :set_article, only: [:show, :edit, :update, :destroy]
def index
@articles = Article.all
end
(省略)
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article, notice: 'Article was successfully created.'
else
render action: 'new'
end
end
(省略)
private
# Use callbacks to share common setup or constraints between actions.
def set_article
@article = Article.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def article_params
params.require(:article).permit(:title, :content)
end
end
[/cc]
以前は、article_params なんてprivate method はなかった気がする。create、update action 時、paramsを受け取って対象となるカラムの操作を行っていた。ただ、更新して良いもの、更新させたくないものがあるので、それらの機能は model に attr_accessibleやattr_protected を設定していた。Article modelは以下のように書いていた。
[cc lang="rails" height="50"]
class Article < ActiveRecord::Base
attr_accessible :title, :content
end
[/cc]
去年話題にもなりましたが、Mass Assignment の脆弱性対策としての一環なんでしょうけれど。controller側ではなくmodel側でなんとかできたら良いのに..と思います。(controllerをすっきりさせたいという意味で、、ですが、機能的にはcontrollerの役目なのかな..)