我正在尝试将一个属性写入活动记录对象,然后再将其返回给客户端。
user = User.find(18).profile
然后我想设置user[:random_attribute] = 'random_attribute'
但是我收到以下错误消息
ActiveModel::MissingAttributeError (can't write unknown attribute random_attribute'):
在将记录返回给客户端之前,将随机数据添加到记录的最佳方法是什么?
答案 0 :(得分:1)
看起来你需要的是一个虚拟属性(有很多关于ActiveRecord虚拟属性的信息)。
class User < ActiveRecord::Base
def random_attribute
# ...
end
end
如果要在代码中的其他位置分配random_attribute
值,可以通过使用attr_accessor
定义相应的getter和setter方法,就像在任何其他Ruby类中一样。
class User < ActiveRecord::Base
attr_accessor :random_attribute
end
a = User.new
a.random_attribute = 42
a.random_attribute # => 42
定义getter和setter方法的另一种方法(如果你可能需要更复杂的东西):
class User < ActiveRecord::Base
def random_attribute(a)
@random_attribute
end
def random_attribute=(a)
@random_attribute = a
end
end
请记住,虽然在序列化期间,默认情况下不会包含该属性,因此如果您在json中需要此属性,则可能必须将相应的参数传递给to_json
方法。 / p>
puts a.to_json(methods: [:random_attribute])
# => { ... "random_attribute":42}