在Rails中,有没有办法指定你想要attr_accessor的TYPE,并使用内置的Rails验证来验证它?
我从来没有找到一个很好的方法来做到这一点,所以我想我会问。
例如,在ActiveRecord模型中,数据库支持的属性会自动进行类型转换为适当的数据库支持类型。如果我有一个
Category
模型,它有几个属性,比如name
和category_id
,如果我这样做:
Category.new(params[:category])
Rails知道name
是一个字符串而category_id
是一个整数。
假设我有几个我要验证的瞬态/合成属性,并且它们具有特定类型。我想从表单中提交它们,我希望它们根据它们的定义自动转换为String或Integer或Date(例如)。
如果我要在Rails模型中声明一些内容,例如:
attr_accessor :some_number_variable
attr_accessor :some_date
是否有一种内置的方式来告诉Rails“我希望你将前者转换为整数,后者转换为日期,当我去Category.new(params[:category])
”只要params[:category][:some_number_variable]
和params[:category][:some_date]
是提交给控制器的数据的一部分(我发现Date示例可能有点棘手,因为有很多日期格式)。
没有找到相关结果
已邀请:
6 个回复
烫珊
肉簧咸缮
您可以设置默认值,并定义自己的类型,以及其他好东西。然后,您可以像任何其他DB支持的属性一样验证这些属性(虚拟或非虚拟)。
完趣镐
只是创建读者/编写器方法,它来自Ruby,而不是Rails。我认为经常混淆的Rails方法是
,它有不同的用途。如果要在读取属性时进行强制转换,则可以覆盖读取器。
这至少可以免费给你作家。这是我所知道的(我认为)你所描述的最佳解决方案。 编辑:就验证而言,我相信如果你使用Rails 3,你将更容易对这些属性进行验证(我没有这样做,所以我不能肯定地说) 。既然验证没有直接绑定到ActiveRecord,我相信它是可能的。
谷起
怪酞撩匹
寒健
参考:Rails ActiveRecord :: MultiparameterAssignmentErrors