将属性写入活动记录对象

时间:2015-03-01 19:05:06

标签: ruby-on-rails ruby

我正在尝试将一个属性写入活动记录对象,然后再将其返回给客户端。

user = User.find(18).profile

然后我想设置user[:random_attribute] = 'random_attribute'

但是我收到以下错误消息

ActiveModel::MissingAttributeError (can't write unknown attribute random_attribute'):

在将记录返回给客户端之前,将随机数据添加到记录的最佳方法是什么?

1 个答案:

答案 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}