Rails で ToDo アプリをつくる⑥ (Rails 入門)
↓の続き
Rails ストロングパラメータ
Rails には、ストロングパラメータというものがあります。
ストロングパラメータとは、安全性が検証されたパラメータということになります。
つまり、パラメータに不正な値がないかをチェックする必要があります。
そして、不正な値は無視します。
不正な値をチェックし、無視できるようにする理由は、マスアサインメント脆弱性による、意図しないデータの追加や編集が行われる可能性があるから、です。
参考: qiita.com
ストロングパラメータを利用し、不正なパラメータを利用できないようにする必要があります。
require と permit
Rails でストロングパラメータを利用する方法は二つあります。
一つ目がrequire
メソッド、もう一つがpermit
メソッドです。
require
は、一つのキーを指定し、そのキーに対応する値のみを返します。
permit
は、複数のキーを指定し、そのキーそれぞれに対応するキーと値のペアを返します。
多くのケースでは、require
で絞り込みを行ったあとで、permit
により選択をする、といった使われ方が多いようです。
ToDoアプリのソースコード変更
ToDoアプリでも、Railsのストロングパラメータを利用できるように、変更していきます。
パラメータを受け取るのはコントローラーなので、app/controllers/todos_controller.rb
を変更していきます。
変更点は以下の通りです。
@@ -4,14 +4,7 @@ class TodosController < ApplicationController end def create - @title = params[:title] - @description = params[:description] - - @todo = Todo.new( - title: @title, - description: @description, - status: 'In progress' - ) + @todo = Todo.new(todo_params) if @todo.save redirect_to :action => 'index' @@ -22,17 +15,20 @@ class TodosController < ApplicationController end def destroy - @id = params[:id] - @todo = Todo.find(@id) + @todo = Todo.find(params.require(:id)) @todo.destroy redirect_to :action => 'index' end def toggle - @id = params[:id] - @todo = Todo.find(@id) + @todo = Todo.find(params.require(:id)) new_status = @todo.status == 'In progress' ? 'Complete' : 'In progress' @todo.update(status: new_status) redirect_to :action => 'index' end + + private + def todo_params + return params.permit(:title, :description, :status) + end end
終わり