键入安全Rails 3无表模型

时间:2012-01-18 17:48:18

标签: ruby-on-rails ruby ruby-on-rails-3 activemodel

这个Railscast描述了如何在Rails 3中设置无表格模型,如下所示:

class Message
  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend ActiveModel::Naming

  attr_accessor :name, :email, :content

  validates_presence_of :name
  validates_format_of :email, :with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i
  validates_length_of :content, :maximum => 500

  def initialize(attributes = {})
    attributes.each do |name, value|
      send("#{name}=", value)
    end
  end

  def persisted?
    false
  end
end

它工作得很好,但它没有做到这一点让Rails知道属性是什么类型。这意味着虽然各种插件/库工作,但它们往往会回退到有效地将属性视为“任何”类型。例如,to_xml将它们列为“yaml”类型。

有没有办法告诉Rails Tableless模型中属性的类型是什么?

2 个答案:

答案 0 :(得分:2)

你应该看一下ActiveAttr,它提供了类似这样的类型属性:

class Person
  include ActiveAttr::TypecastedAttributes
  attribute :age, :type => Integer
end

还有RailsCast about ActiveAttr

答案 1 :(得分:0)

activerecord-tableless宝石。它是创建无表格ActiveRecord模型的宝石,因此它支持验证,关联,类型。

您在问题中描述的方式不支持关联,也不支持(如您所发现的)类型。