非永久ActiveRecord模型属性
我想添加到一个现有的模型一些不需要持久的属性,甚至映射到数据库列。 有没有解决scheme来指定这样的事情?
当然,使用好老ruby的attr_accessor
。 在你的模型中:
attr_accessor :foo, :bar
你将能够做到:
object.foo = 'baz' object.foo #=> 'baz'
我遇到了同样的问题,但是我需要引导模型,所以在调用to_json之后,该属性必须保留。 你需要为此做一件额外的事情。
正如apneadiving所说,最简单的方法就是去你的模型,并添加:
attr_accessor :foo
然后你可以分配你想要的属性。 但要使属性保持不变,您需要更改属性方法。 在你的模型文件中添加这个方法:
def attributes super.merge('foo' => self.foo) end
如果有人想知道如何将其渲染到视图中,请使用render方法的方法参数,如下所示:
render json: {results: results}, methods: [:my_attribute]
请注意,只有在您的模型上设置了attr_accessor并在控制器操作中设置了属性,才能解释所选答案。
在我的情况下,我想使用左连接来填充自定义属性。 它工作,如果我不添加任何东西,但我也希望能够设置一个新的对象的属性,当然它不存在。 如果我添加attr_accessor
那么select
后它总是返回nil
。 这是我最终的方法,即设置新的对象和从左连接检索。
after_initialize do self.foo = nil unless @attributes.key?("foo") end def foo @attributes["foo"] end def foo=(value) @attributes["foo"] = value end