验证在rails中提交的表单字段属于所有者

时间:2013-03-26 23:02:38

标签: ruby-on-rails ruby validation

我有一个名为PaymentMethods的模型属于User。当用户去结账时,他们会看到属于他们的可用PaymentMethods列表。确保用户无法手动编辑dom并使用其他人的付款方式的最佳方法是什么?

我目前正在我的模型中使用自定义验证

def payment_method_owner?

  errors.add(:payment_method, "This card doesn't belong to you") unless self.user.payment_methods.include? self.payment_method

end

这是在Rails中执行此操作的最佳方式吗?

1 个答案:

答案 0 :(得分:0)

我认为,一般来说,这是一个很好的方式。

然而,有几点可能值得一提。

通常,在向特定属性添加错误时,会使用不包含主题的句子片段来完成。原因是因为full_messages帮助器将属性名称与错误连接起来。在这种情况下,完整的消息将是“付款方式此卡不属于您”。我建议将邮件更改为“不属于您”,导致“付款方式不属于您”。如果他们收到此消息,他们可能知道他们为什么会得到它...缩短消息的另一种方法是将完整错误添加到base,但这会使field_with_errors内容在视图中不起作用。

其次,您可以删除方法中的两个self.,它们是不必要的。

最后,在我看来,对于这种类型的验证来说,这是完美的逻辑量,任何更复杂的东西都可能需要custom validator

修改

试试这个:

validates :payment_method, inclusion: { in: lambda{ |x| x.user.payment_methods } }