在ActiveRecord::Base模型中,我可以将模型的状态重置为从数据库获取模型时的状态reload,只要我设置的属性映射到表列:
user = User.first
user.email #=> "email@domain.com"
user.email = "example@site.com"
user.email #=> "example@site.com"
user.reload
user.email #=> "email@domain.com"
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加一个自定义属性,我发现让它行为相同的唯一方法是这样的:
class User < ActiveRecord::Base
attr_accessor :user_agent
def reload
super
self.user_agent = nil
self
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否有一些API可以在重新加载时重置非数据库列属性?就像是:
class User < ActiveRecord::Base
# this
reloadable_attr_accessor :user_agent
# or this
def user_agent
@user_agent
end
def user_agent=(value)
set_instance_var_that_resets_on_reload("@user_agent", value)
end
end
Run Code Online (Sandbox Code Playgroud)
在某个地方Rails中存在吗?