Rails 4.2.5.1 ActiveRecord:何时/为什么使用self [:attr] =代替write_attribute()

时间:2016-02-04 20:08:09

标签: ruby-on-rails ruby activerecord

在RoR ActiveRecord类中,使用self[:attribute]=value而不是write_attribute( :attribute => value )的优缺点是什么。这只是风格问题吗?或者是否有更深层次的理由偏爱另一个?

1 个答案:

答案 0 :(得分:1)

如果查看github上的源代码,可以看到内部使用私有方法write_attribute_with_type_cast

https://github.com/rails/rails/blob/8fdd4bf761b280126e52a212eed187391bdedbb3/activerecord/lib/active_record/attribute_methods/write.rb#L55

这比你自己调用self[:attribute]=value更有优势,如果你设置id,或者你认为应该id,那么该方法将处理找到正确的属性模型主键的名称。

最后,通过write_from_user,rails实际上为您调用self[:attribute] = value,尽管名称不同:

https://github.com/rails/rails/blob/8fdd4bf761b280126e52a212eed187391bdedbb3/activerecord/lib/active_record/attribute_set.rb#L38

如果您的模型没有使用标准:id列作为主键,那么除:custom_primary_keyid的自动更正外,使用{{1}没有任何功能优势超过write_attribute