Posted on

Rails4のStrong Parameters

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の役目なのかな..)