ruby-on-rails - Ruby on Rails : building a model with an attribute not in the database?

标签 ruby-on-rails ruby

我有一个模型,它根据用户提交的表单参数设置其属性之一。该模型是父资源主页的子资源。假设的示例如下:

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/

相关文章:

ruby-on-rails - 使用 Rails + React-rails gem + React Router 进行服务器渲染

ruby-on-rails - Ruby on Rails 中的静态页面

ruby-on-rails - Rails 5 失败测试 ActiveRecord::AssociationTypeMismatch

ruby-on-rails - REST 客户端和外来字符

ruby-on-rails - Rails 3 应用程序中未初始化的常量 UsersController::PostComment

sql - 如何将 (sql) 数据库添加到我的 sintra 应用程序?

ruby-on-rails - Paypal自适应支付不再接受新申请?

jquery - RoR 教程 Michael Hartl 删除微帖子也会删除用户

javascript - Rails 部署时 Jquery 文件上传功能不起作用

ruby-on-rails - 找不到有效的 gem : certificate verify failed