1

我有一个属于用户的名为 PaymentMethods 的模型。当用户结账时,他们会看到属于他们的可用 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 中执行此操作的最佳方法吗?

4

1 回答 1

0

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

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

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

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

最后,在我看来,这是此类验证的完美逻辑量,任何更复杂的东西都可能需要自定义验证器

编辑:

尝试这个:

validates :payment_method, inclusion: { in: lambda{ |x| x.user.payment_methods } } 
于 2013-03-26T23:19:06.793 回答