我在尝试使用find_by(id)获取对象后调用self.method
app.get()的路线创建中的代码:
userFound = Models::Persistence::User.find_by(:auth_id => authid)
result = Models::Persistence::User.new
result = userFound
puts result.class
puts userFound.class
return result.to_json
self.method函数在Models :: Persistence :: User中定义。谁能告诉我为什么不调用self.transformToApiValue()? 我试过的事情: 在Debug中更多代码,看看是否正在访问self.method。 Tunrs out it没有。
如果不清楚/我需要发布更多代码段,请告诉我。
Edit1:用户模型中的自我功能只是删除了oid等以供客户端查看
def self.transformToApiValue(key, val)
val = super(key, val)
if (key == 'useractivity')
newVal = []
val.each { |useractivity|
if useractivity != 'course'
newBlock = Models::Persistence::Useractivity.parseForClient(useractivity)
newVal.push(newBlock)
end
}
val = newVal
end
return val
end
上面的函数允许在将JSON转换为客户端值时自定义JSON中的useractivity属性。
答案 0 :(得分:2)
听起来你在轨道上假设有太多魔法。
self.method是一种类方法。这意味着要调用它,你必须在控制器或其他模型中明确地运行它
Models::Persistence::User.transformToApiValue(your_key, your_val)
根据你提到的内容,这可能不是你想要的。您想要进行回调,在保存之前设置该值。因此,在您的用户模型中,您将添加
before_save :transform_api_value
然后在相同的模型中定义
def transform_api_value
attribute_you_are_editing = Models::Persistence::User.transformToApiValue(value_you_are_transforming)
end
然后,它将在保存之前运行转换并正确保存用户属性。您必须更新transformToApiValue。我第一次读它时代码很难遵循,但我希望这有助于你理解这个概念。
想要补充说这里有一些问题,例如你可能不想在每次保存时都这样做,你可能想在创建时这样做。我建议阅读回调指南,以确定您的业务逻辑如何适合这一点。 http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html