【问题标题】:simple_form doesnt prevent sending request without required fieldssimple_form 不会阻止发送没有必填字段的请求
【发布时间】:2013-11-02 11:33:52
【问题描述】:

我有这个表格

= simple_form_for @category.fields.build, url: category_fields_path(@category) do |f|
    = f.input :kind, collection: Field::FIELD_TYPES, prompt: "Choose field type"
    = f.input :description
    = f.submit "Add field"

还有这个字段模型

class Field < ActiveRecord::Base
  FIELD_TYPES = %w(integer float date string text)

  validates :description, presence: true
  validates :kind, presence: true

  belongs_to :category

end

当我将“描述”字段留空时,不会发送任何请求,并且我会收到“请填写此字段”的通知。这就是我想要的。另一方面,当 description 填写但 kind 没有填写时,仍然会向“create”操作发送请求!没有创建任何字段,但需要再次填写“描述”。在这种情况下不应该有请求。知道如何解决这个问题吗?

【问题讨论】:

    标签: ruby-on-rails validation simple-form


    【解决方案1】:

    虽然,我对您的问题没有确切的答案,但您应该从检查 HTML 输出开始。 Simple from 依赖于HTML5 to provide front-end validation。所有输入都应具有required 属性,以启用验证。也许有一个错误,在这种特殊情况下 simple_form 不输出required 属性。

    另一件需要考虑的事情,因为它是 HTML5,请咨询浏览器支持:http://caniuse.com/#feat=form-validation。从理论上讲,您可能正在对表单验证支持有限的浏览器进行测试。

    如果您发现 simple_from 没有为您的 kind 燃料输出 required,请尝试强制它:

    = f.input :kind, collection: Field::FIELD_TYPES, prompt: "Choose field type", required: true
    

    【讨论】:

    • 已经尝试强制它,但它不起作用。我正在 chrome 上进行测试,所以它应该很酷
    • 你检查过 HTML 输出吗?这是你应该做的第一件事......
    • 尽管如此,我不想弄乱 html,我需要根据模型验证来工作。
    • 你想不想都没有关系。如果你想解决一个问题你需要找到问题的根源,在我看来这个属性没有输出,这就是问题的根源。如果是这种情况,您将拥有三个选项 - 向 simple_from 团队提交错误、自行修复或通过不同的方式输出 HTML 来解决问题。正如您已经指出的那样 - 验证工作正常,但 Rails 与您的浏览器以及它如何验证 HTML5 表单无关。
    【解决方案2】:

    我在 Simple Form github 的 issue topichere 上得到了答案。总而言之,问题很及时,验证还没有(还没有?)正确使用它,解决方案是替换它,例如:

    = f.input :kind, collection: Field::FIELD_TYPES, include_blank: "Choose field type", label: false
    

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 1970-01-01
      • 2020-02-10
      • 2013-07-29
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      相关资源
      最近更新 更多