属性没有保存?
有没有替代update_attributes不保存记录?
所以我可以做这样的事情:
@car = Car.new(:make => 'GMC')
#other processing
@car.update_attributes(:model => 'Sierra', :year => "2012", :looks => "Super Sexy, wanna make love to it")
#other processing
@car.save
顺便说一句,我知道我可以@car.model = 'Sierra'
,但我想在一行上更新它们。
我相信你正在寻找的是assign_attributes
。
它基本上与update_attributes相同,但不保存记录:
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 }) # Raises an ActiveModel::MassAssignmentSecurity::Error
user.assign_attributes({ :name => 'Bob'})
user.name # => "Bob"
user.is_admin? # => false
user.new_record? # => true
你可以使用assign_attributes
或attributes=
(它们是相同的)
更新方法备忘单(适用于Rails 4):
update_attributes
= assign_attributes
+ save
attributes=
= assign_attributes
别名 update
= update_attributes
别名 资源:
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/persistence.rb
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/attribute_assignment.rb
另一个备忘单:
http://www.davidverhasselt.com/set-attributes-in-activerecord/#cheat-sheet
你可以使用'属性'方法:
@car.attributes = {:model => 'Sierra', :years => '1990', :looks => 'Sexy'}
资料来源:http://api.rubyonrails.org/classes/ActiveRecord/Base.html
attributes =(new_attributes,guard_protected_attributes = true)允许您通过传递一个与属性名匹配的键(它们再次与列名匹配)来一次设置所有属性。
如果guard_protected_attributes为true(缺省值),则可以使用attr_protected宏来保护敏感属性免受此形式的批量分配。 或者,您也可以指定可以使用attr_accessible宏访问哪些属性。 然后,所有未包含在其中的属性将不被批量分配。
class User < ActiveRecord::Base
attr_protected :is_admin
end
user = User.new
user.attributes = { :username => 'Phusion', :is_admin => true }
user.username # => "Phusion"
user.is_admin? # => false
user.send(:attributes=, { :username => 'Phusion', :is_admin => true }, false)
user.is_admin? # => true
链接地址: http://www.djcxy.com/p/66229.html