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
....
私の質問は、これがセキュリティにどのような影響を与えるかです。