我有一个模型,它根据用户提交的表单参数设置其属性之一。该模型是父资源主页的子资源。假设的示例如下:
Person 类有一个年龄属性。用户提交生日作为 HTTP POST 参数,我需要从中推导出用户的年龄。所以我会做这样的事情:
@home.people.build(:name => params[:name], :birthdate => params[:birthdate])
出于显而易见的原因,Rails 会对此感到厌恶,提示它不知道属性的生日是什么。解决这个问题的正确方法是什么?
是否可以将构建构造函数与提供的解决方案一起使用,以便我的外键关系也可以正确设置?如果没有,有什么更好的方法来解决这个问题?
最佳答案
您可以使用虚拟属性来接受来自 POST 的参数,然后计算您想要的列值(未经测试):
class Person < ActiveRecord::Base
def birthdate=(birthdate)
self.age = Time.now - Date.new(birthdate) # [1]
end
end
[1] 不是正确的语法 - 您必须根据参数的格式解析日期 - 但您明白了
关于ruby-on-rails - Ruby on Rails : building a model with an attribute not in the database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2664193/