##先看看Rails 3裏是怎麼弄的html
# app/models/uesr.rb class User < ActiveRecord::Base attr_accessible :username, :password end # app/controllers/users_controller.rb class UsersController < ApplicationController def create @user = User.create! params[:user] redirect_to @user end end
rails 3中是在model裏面設置白名單。api
##再來看看Rails 4裏怎搞ruby
Rails 4 引入了 Strong Parameters 的機制,model再也不負責白名單的維護,把過濾非法屬性的職責推給了 Controller。app
# app/models/uesr.rb class User < ActiveRecord::Base; end # app/controllers/users_controller.rb class UsersController < ApplicationController def create @user = User.create! user_params redirect_to @user end private def user_params params.require(:user).permit(:username, :password) end end
View傳過來的params是一個 ActionController::Parameters對象,它有一個 permitted 屬性, 默認爲 false,若是此時傳給model,會報 ActiveModel::ForbiddenAttributesError,只有把 permitted 屬性設置爲 true後,才能用於model。說白了 Strong Parameter 其是就是一層白名單過濾。ui