属性没有保存?

有没有替代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_attributesattributes= (它们是相同的)

更新方法备忘单(适用于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

    上一篇: attributes without save?

    下一篇: Common Lisp auto completion in emacs