##先看看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