gpt4 book ai didi

ruby-on-rails - 将字段添加到 Rails 模型而不将它们保存在 Rails 的数据库中

转载 作者:数据小太阳 更新时间:2023-10-29 08:46:53 27 4
gpt4 key购买 nike

我正在根据表示 Rails 模型的 JSON 对象呈现 View 。此 JSON 对象需要不属于 Rails 模型的字段,因此我将它们添加到 Controller 中,如下例 1 所示:

#Controller
events = Event.where(<query>).each do |event|
event[:duration] = (event.end - event.start)/3600
event[:datatime] = event.start.hour + event.start.min/60.0
...
end

render json: events

这会正确呈现我的数据。但是,我收到以下弃用警告:

DEPRECATION WARNING: You're trying to create an attribute `duration'. Writing arbitrary attributes on a model is deprecated. Please just use `attr_writer` etc.

我想重写我的代码以避免这个警告。如果我尝试将这些额外字段视为标准对象属性,则值不会正确呈现。下面是我尝试更改为使用标准对象属性的尝试:

#Controller
events = Event.where(<query>).each do |event|
event.duration = (event.end - event.start)/3600
event.datatime = event.start.hour + event.start.min/60.0
...
end

render json: events



#Model
class Event < ActiveRecord::Base
include ActiveModel::AttributeMethods
attr_accessor :duration, :datatime

这会导致字段被填充undefined。如果我使用 attr_writer 而不是 attr_accessor,就会出现这种情况。我该如何解决这个问题?我是被迫将这些临时属性存储在数据库中,还是只是使用了错误的语法?

最佳答案

如果你想读取和写入访问器,请使用 attr_accessor:

class Event < ActiveRecord::Base
attr_accessor :duration, :datatime
end

您无需包含 ActiveModel::AttributeMethods 即可使用 attr_accessor

要在 JSON 中包含访问器,请告诉渲染器包含它们:

render json: events, methods: [:duration, :datatime]

关于ruby-on-rails - 将字段添加到 Rails 模型而不将它们保存在 Rails 的数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com