2013-03-26 20 views
1

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

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

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中做到这一点的最好方法是什么?

回答

0

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

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

通常,在向特定属性添加错误时,会使用不包含主题的句子片段来完成此操作。造成这种情况的原因是,full_messages帮助器将属性名与错误连接起来。在这种情况下,完整的信息将是“支付方式这张卡不属于你”。我建议将消息​​更改为“不属于你”,导致“付款方式不属于你”。如果他们得到这个消息,他们可能知道他们为什么要得到它......缩短消息的另一种方法是将完整的错误添加到基础中,但这会使field_with_errors在视图中不起作用。其次,你可以在你的方法中删除两个self.,它们是不必要的。

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

编辑:

试试这个:

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

谢谢。我担心这可能是最好的方式,但希望Rails提供了一些方法来做到这一点。我不想创建一个方法来检查每个参数,以确保用户不想传递他们不应该的东西。 – ajaxon 2013-03-27 17:14:15

+0

其实,有...尝试编辑,也许... – 2013-03-27 17:39:12