Rails 4 Strong Parameters

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

ActionController::Parameterscode

相关文章
相关标签/搜索