相关疑难解决方法(0)

是否有一个干净的API用于在ActiveRecord的'reload'上重置实例变量?

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中存在吗?

activerecord ruby-on-rails

15
推荐指数
2
解决办法
6067
查看次数

标签 统计

activerecord ×1

ruby-on-rails ×1