Ruby on rails Rails ActiveRecord非db属性?

Ruby on rails Rails ActiveRecord非db属性?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个ActiveRecord模型,Instance,它基于数据库,但有一些非数据库属性 一个例子是“解决” 我需要能够设置/获取分辨率,但此属性需要自定义非db setter/getter。我应该把这些放在哪里&如何构建我的模型 我还需要能够验证决议,因为他们是通过正则表达式设置。我是否可以使用的验证\u格式\u或是否需要对自定义验证程序进行编码?如果需要标准读写器方法,可以使用attr\u访问器: class Instance attr_accessor :resolution end

我有一个ActiveRecord模型,
Instance
,它基于数据库,但有一些非数据库属性

一个例子是“解决”

我需要能够设置/获取分辨率,但此属性需要自定义非db setter/getter。我应该把这些放在哪里&如何构建我的模型


我还需要能够验证决议,因为他们是通过正则表达式设置。我是否可以使用的
验证\u格式\u
或是否需要对自定义验证程序进行编码?

如果需要标准读写器方法,可以使用
attr\u访问器

class Instance
  attr_accessor :resolution
end
您也可以自己编写reader和writer方法:

class Instance
  def resolution
    @resolution
  end

  def resolution=(value)
    @resolution = value
    validate! # this will raise RecordInvalid if the validation fails
  end
end

你如何“构建”你的模型?添加方法。你可以像验证每个普通属性一样验证虚拟属性-我似乎不适用;我已经用writer方法之外的:/\d+x+\d+/验证了:分辨率的格式,但它似乎被忽略了。我需要写一些特定的东西吗?validates\u format\u of()是一种ActiveRecord验证,因此,如果您正在执行数据库事务,则可以对非数据库字段进行验证,如解析。但是如果您不是,代码中似乎就是这样,那么您将需要编写自己的自定义验证器。如果你想,如果你认为这对以后遇到这个问题的其他人有用,那么就回答这个问题,如果没有,我就把它作为一个评论。Piggybacking ex:validates_format_of:resolution,:with=>/\d+x+\d+/,:on=>:creates太好了,谢谢!我已经用writer方法之外的:/\d+x+\d+/验证了:分辨率的格式,但它似乎被忽略了。我需要写一些具体的东西吗?你能展示一下代码,记录是在哪里创建和验证的吗?我完全按照你写的方式做的;我刚刚从控制台调用了Instance.last.resolution='asdf'。不幸的是,它没有抛出错误,而是继续运行writer。只有在您尝试保存记录时,才会进行验证。在分配属性时不应该抛出错误那么在这种情况下验证的最佳方法是什么?