【问题标题】:What is the ActiveModel method attribute "_was" used for?ActiveModel 方法属性“_was”的用途是什么?
【发布时间】:2012-12-16 23:43:29
【问题描述】:

在控制台中使用自动完成时,我经常看到“_was”附加到我的属性中。但我找不到任何文档或最佳使用实践。它有什么作用以及应该如何使用?

例如:user.fname 有方法user.fname_was

使用 source_location,我将其追踪到:active_model/attribute_methods.rb",第 296 行,但没有任何具体内容。

【问题讨论】:

    标签: ruby-on-rails ruby activerecord activemodel


    【解决方案1】:

    这是 ActiveModel::Dirty 的一部分 你可以在这里看到它https://github.com/rails/rails/blob/af64ac4e5ce8406137d5520fa88e8f652ab703e9/activemodel/lib/active_model/dirty.rb#L146 示例

    person = Person.find_by_name('Uncle Bob')
    person.changed?       # => false
    

    改名:

    person.name = 'Bob'
    person.changed?       # => true
    person.name_changed?  # => true
    
    #method _was return prev attribute value
    person.name_was  # => 'Uncle Bob'  
    person.name_change    # => ['Uncle Bob', 'Bob']
    person.name = 'Bill'
    person.name_change    # => ['Uncle Bob', 'Bill']
    

    【讨论】:

    • 几个月前刚玩,我在挖源代码
    • 我还要注意,调用person.save! 会将name_was 重置为与新的name 相同
    猜你喜欢
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多