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

相關文章
相關標籤/搜索