在Rails中,有没有办法指定你想要attr_accessor的TYPE,并使用内置的Rails验证来验证它?

hum*_*ing 6 validation ruby-on-rails transient attr-accessor

我从来没有找到一个很好的方法来做到这一点,所以我想我会问.

例如,在ActiveRecord模型中,数据库支持的属性会自动进行类型转换为适当的数据库支持类型.如果我有一个Category模型,它有几个属性的,说namecategory_id,如果我是这样的:

Category.new(params[:category])
Run Code Online (Sandbox Code Playgroud)

Rails知道这name是一个String并且category_id是一个Integer.

假设我有几个我要验证的瞬态/合成属性,并且它们具有特定类型.我想从表单中提交它们,我希望它们根据它们的定义自动转换为String或Integer或Date(例如).

如果我要在Rails模型中声明一些内容,例如:

attr_accessor :some_number_variable
attr_accessor :some_date
Run Code Online (Sandbox Code Playgroud)

是否有一个内置的方式来告诉Rails"我想你前强制转换为整数,而后者的日期,当我走Category.new(params[:category])",只要params[:category][:some_number_variable]params[:category][:some_date]提交给控制器的数据的一部分(我知道考虑到许多日期格式,Date示例可能有点棘手).

Mau*_*uan 6

从 Rails 5 开始,你可以像这样使用Attribute API

class SomeModel < ActiveRecord::Base
  attribute :a_checkbox_name, :boolean, default: false
end
Run Code Online (Sandbox Code Playgroud)

您可以设置默认值,并定义您自己的类型,等等。然后您可以像任何其他数据库支持的属性一样验证这些属性(虚拟或非虚拟)。


hum*_*ing 0

这两个答复都没有完全回答问题。我相信问题的正确答案是“否”。这些答复都解决了问题答案为“否”这一事实的潜在解决方法,并且都是有效的评论/想法。