【问题标题】:Validating form fields submitted in rails belong to owner验证在 rails 中提交的表单字段属于所有者
【发布时间】:2013-03-26 23:02:38
【问题描述】:

我有一个属于用户的名为 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 中执行此操作的最佳方式吗?

【问题讨论】:

    标签: ruby-on-rails ruby validation


    【解决方案1】:

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

    不过,有几点可能值得一提。

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

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

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

    编辑:

    试试这个:

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

    【讨论】:

    • 谢谢。我担心这可能是最好的方法,但希望 rails 提供了一些方法来做到这一点。我不想创建一个方法来检查每个参数以确保用户没有尝试传递他们不应该传递的东西。
    猜你喜欢
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    相关资源
    最近更新 更多