问:如何验证Rails 4应用程序(Postgres db)中的序列化数组字段?我有一个成员模型,其中有一个“目标”字段,一个序列化数组。表单字段显示为一系列复选框,成员可以在其中识别健身目标。成员可以有多个目标,但必须至少有一个目标。我的理解是Rails没有针对序列化数组字段的内置验证。因此,我试图编写一个自定义验证器,但是很难使其正常工作。
这是我的目标:我想在我的应用程序中查看以下行为:如果成员选择了至少一个目标,则验证应该通过,并且记录可以保存到数据库。如果成员未能声明任何目标,则验证将失败,并且不会保存该记录。
这是我的member.rb(模型)文件中的相关代码:
serialize:goal,数组
目标=%w [“脂肪减少”,“肌肉增加”,“健美”,“手撕”,“笨拙”,“改善平衡”,“增强灵活性”,“保持当前体重” ]
validate:goal_check
保护的
def Goal_check目标。
每个| g |
errors.add(:goal,“#{g}无效;您必须检查至少一个目标”),除非GOALS.include?克
端
端
我的自定义验证程序无法正常工作。即使成员检查了至少一个目标,它也可以防止其被保存!我的“ goal_check”方法在哪里出错?如何编写可以实现目标的自定义验证器?谢谢!
答:在您的target。每次迭代中,更改GOALS.include吗?g到GOALS.include?(g)。
例如
serialize :goal , 数组
GOALS = %w [“脂肪减少”,“肌肉增加”,“健美”,“手撕”,“笨拙”,“改善平衡”,“增强灵活性”,“保持当前体重” ]
validate :goal_check
保护的def Goal_check目标。每个做| g | 错误。add (:goal ,“ #{ g }无效;您必须检查至少一个目标” )除非GOALS 。包括?(g )结束结束