gpt4 book ai didi

ruby-on-rails - 为什么 rails 在设置后更改属性 _was 值的类型?

转载 作者:数据小太阳 更新时间:2023-10-29 08:05:10 24 4
gpt4 key购买 nike

我的模型中有一个属性,它存储为文本但解释为有理数。我有这个方法来处理:

def start
read_attribute(:start).to_r
end

当我将 start 属性设置为新值时,start_was 辅助方法返回一个字符串,而不是有理数,但在我这样做之前,它返回正确的值。为什么?

Loading development environment (Rails 3.2.8)
1.9.3p194 :001 > d = Day.find(55)
Day Load (8.7ms) SELECT "days".* FROM "days" WHERE "days"."id" = ? LIMIT 1 [["id", 55]]
=> #<Day id: 55, date: "2012-03-30", start: "1/2", finish: "2/2", created_at: "2012-09-18 15:16:42", updated_at: "2012-09-19 08:20:41", day_year_id: 1>

1.9.3p194 :002 > d.start_was
=> (1/2)

1.9.3p194 :003 > d.start=0
=> 0

1.9.3p194 :004 > d.start_was
=> "1/2"

最佳答案

我认为原因是ActiveModel(activemodel-3.2.8\lib\active_model\dirty.rb)中的这个方法

# Handle <tt>*_was</tt> for +method_missing+.
def attribute_was(attr)
attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
end

如您所见,如果属性实际上并未更改,它只会调用自己的 getter,在您的情况下,您会点击执行转换的 start 方法。但是,如果该属性实际上发生了更改,它会从 changed_attributes 存储中读取其原始值。

关于ruby-on-rails - 为什么 rails 在设置后更改属性 _was 值的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12491121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com