混合attr_accessible和strong_parameters,如何跳过attr_accessible?

时间:2014-09-19 00:47:54

标签: ruby-on-rails security activerecord

首先,我非常清楚完全清楚这两种不良做法。

我有一个设置attr_accessible的模型。我想开始将我们的应用程序转换为strong_parameters。问题是我需要在重构应用程序的各个部分时这样做。我是否可以使用ActiveRecord方法来更新绕过attr_accessible的属性?或者我可以定义绕过它的attr_accessible=false类型的东西吗?

代码示例:

型号:

class User < ActiveRecord::Base
  attr_accessible :first_name, :last_name, :email, :password
end

控制器:

class UsersController < ApplicationController
  before_action :set_user

  def update
    @user.assign_attributes(user_params)
    @user.save!
  end

  private

  def set_user
    @user = User.find(params[:id])
  end

  # Never trust parameters from the scary internet, only allow the white list through.
  def user_params
    params.require(:user).permit(
                                  :first_name, :last_name, :email, :other_attribute_not_in_accessible
                                )
  end
end

1 个答案:

答案 0 :(得分:1)

发现它!

在控制器中,执行以下操作:

@user.update_attributes(user_params,:without_protection=>true)

然后它会起作用。