非永久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