1

Rails 3.1 の処理部分がattr_accessor壊れているようです。

データベースをまったく持たないモデルと、永続化されていない属性を持つモデルがいくつかあります。

例:

class User < ActiveRecord::Base

  #persisted attribs
  attr_accessible :name, :email, :password, :password_confirmation, :is_admin, :permissions

  #non persisted attribs<br />
  attr_accessor :roseburg, :kfc, :kcpl
  ........

コントローラーでユーザーを保存しようとすると、 create または update で

def create<br />
  @user = User.new(params[:user])   

また

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

  respond_to do |format|
    if @user.update_attributes(params[:user])    

次のようなエラーが表示されますCannot mass assign protected attributes :roseburg, :kfc, :kcpl

回避策は、属性を設定し、save メソッドを使用することです。

def create
  @user = User.new             

  (params[:user]).each do |attr_name, attr_value| 
    if @user.respond_to?("#{attr_name}")
      @user.send("#{attr_name}=", attr_value)                  
    end
  end

  @user.save
    .....

def update
  @user = User.find(params[:id])
  respond_to do |format|

  (params[:user]).each do |attr_name, attr_value| 
    if @user.respond_to?("#{attr_name}")
      @user.send("#{attr_name}=", attr_value)                  
    end    
  end

  if @user.save
  ....

私の質問は、これがセキュリティにどのような影響を与えるかです。

4

1 に答える 1