Rails3 覚書2
attr_accessible(*attributes)
public
指定された属性以外は、new(attributes)、attributes=(attributes)、update_attribeutes(attributes)で更新されないようにガードする機構
更新するためには、accessor=で明示的に代入する必要がある。
class Customer < ActiveRecord::Base attr_accessible :name, :nickname end customer = Customer.new(:name => "David", :nickname => "Dave", :credit_rating => "Excellent") customer.credit_rating # => nil customer.attributes = { :name => "Jolly fellow", :credit_rating => "Superb" } customer.credit_rating # => nil customer.credit_rating = "Average" customer.credit_rating # => "Average"
assign_attributes(new_attributes, options = {})
public
ロール名でガードをかけたattr_accessibleを使用することができる。
without_protectionオプションがtreuの場合は、ノーガード戦法
class User < ActiveRecord::Base attr_accessible :name attr_accessible :name, :is_admin, :as => :admin end user = User.new user.assign_attributes({ :name => 'Josh', :is_admin => true }) user.name # => "Josh" user.is_admin? # => false user = User.new user.assign_attributes({ :name => 'Josh', :is_admin => true }, :as => :admin) user.name # => "Josh" user.is_admin? # => true user = User.new user.assign_attributes({ :name => 'Josh', :is_admin => true }, :without_protection => true) user.name # => "Josh" user.is_admin? # => true