Rad*_*scu 42 activerecord ruby-on-rails
我想向现有模型添加一些不需要持久化的属性,甚至是映射到数据库列的属性.是否有解决方案来指定这样的事情?
apn*_*ing 52
当然要用好老红宝石attr_accessor.在你的模型中:
attr_accessor :foo, :bar
Run Code Online (Sandbox Code Playgroud)
你将能够做到:
object.foo = 'baz'
object.foo #=> 'baz'
Run Code Online (Sandbox Code Playgroud)
Rus*_*oms 28
我遇到了同样的问题,但我需要引导模型,因此在调用to_json之后属性必须保持不变.你需要为此做一件额外的事情.
正如apneadiving所述,最简单的方法是转到您的模型并添加:
attr_accessor :foo
Run Code Online (Sandbox Code Playgroud)
然后,您可以分配所需的属性.但是要使属性保持不变,您需要更改属性方法.在模型文件中添加此方法:
def attributes
super.merge('foo' => self.foo)
end
Run Code Online (Sandbox Code Playgroud)
如果有人想知道如何将其呈现给视图,请使用render方法的方法参数,如下所示:
render json: {results: results}, methods: [:my_attribute]
Run Code Online (Sandbox Code Playgroud)
请注意,这仅适用于您在模型上设置attr_accessor并在控制器操作中设置属性,因为所选答案已解释.
| 归档时间: |
|
| 查看次数: |
21146 次 |
| 最近记录: |