【发布时间】:2016-06-15 19:18:14
【问题描述】:
我的模型中定义了一个虚拟属性:
class User < ActiveRecord::Base
attr_writer :tdee
attr_reader :tdee
include Authentication
has_many :examples
has_many :meals, inverse_of: :user
def tdee
if gender == 'f'
bmr = 655 + (9.6 * (weight * 0.453592)) + (1.8 * (height * 2.54)) - (4.7 * age)
elsif gender == 'm'
bmr = 66 + (13.7 * (weight * 0.453592)) + (5 * (height * 2.54)) - (6.8 * age)
end
tdee = bmr * activity_level
end
end
我可以在我的 rails 控制台和控制器中访问它。当我索引/显示用户时,我希望它包含在 json 中,所以我假设我必须编辑我的用户序列化程序。目前我的序列化程序看起来像我的迁移生成的默认值:
class UserSerializer < ActiveModel::Serializer
attributes :id, :email, :height, :weight, :age, :activity_level, :gender
end
我尝试过类似的方法:
class UserSerializer < ActiveModel::Serializer
attributes :id, :email, :height, :weight, :age, :activity_level, :gender, :tdee
def tdee
tdee = @user.tdee
end
end
我一直得到
NoMethodError (undefined method `tdee' for nil:NilClass):
app/serializers/user_serializer.rb:6:in `tdee'
app/controllers/users_controller.rb:48:in `index'
this 等其他一些问题谈到了使用 to_json,但我不确定如何在我的上下文中实现这一点,因为我没有使用该方法构建用户信息。
编辑:
如下所示,我需要使用 object.tdee。更新后,我仍然收到无方法错误,因为计算虚拟所需的属性值为零。更新这些解决了这个问题。
【问题讨论】:
标签: ruby-on-rails serialization