0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

attr_protected/accessibleメソッド 登録・更新時に保護

Last updated at Posted at 2017-02-26

attr_protected 'name:保護/許可したいフィールド', [, :as => 'roles:アクセスを許可するロール']

attr_accessible 'name:保護/許可したいフィールド', [, :as => 'admin:アクセスを許可するロール']

user.rb
class User < ActiveRecord::Base
...
# roles列へのマスアサインメントを禁止
attr_protected :roles
# 上と同じ意味をattr_accesibleメソッドで書き換え
# attr_accessible :name, :password, :kname, :email
end
model_controller.rb
@user = User.find(1)
msg + @user.roles
	admin.manager(初期値)
@user.assign_attributes(:name => 'nkakeya', :roles => 'users')
msg += @user.roles 		admin.manager(保護されているので更新されない)

user.rb
class User < ActiveRecord::Base...
...
# roles列へのアクセスをadminロールに対してのみ許可
# (その他の列はデフォルトのロールでアクセス可能)
attr_accessible :name, :password, :kname, :email
attr_accessible :name, :password, :kname, :email, :as => :admin
end

user.rb
class User < ActiveRecord::Base...
...
# roles列へのアクセスをadminロールに対してのみ許可
# (その他の列はデフォルトのロールでアクセス可能)
attr_accessible :name, :password, :kname, :email
attr_accessible :name, :password, :kname, :email, :as => :admin
end

model_controller.rb(protect_access2アクション)
@user = User.find(1)
 msg = @user.name + '|' + @user.roles + '<br />'
	yyamada|admin,manager(初期値)
 @user.assign_attributes(:name => 'sato', :roles => 'users')
 msg += @user.name + '|' + @user.roles + '<br />'	
	sato|admin,manager(保護されているのでroles列は更新されない)
 @user.assign_attributes(:name => 'tanaka', :roles => 'users'),
  :as => :admin)
 msg += @user.name + '|' + @user.roles
	tanaka|users(adminロールはすべての列を更新可能)
	

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?