simple_form不会阻止发送没有必填字段的请求

时间:2013-11-02 11:33:52

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

我有这个表格

= 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'字段留空时,没有请求发送,我收到通知'请填写此字段'。这就是我想要的。另一方面,当填写说明但是没有填写时,仍然会向“创建”操作发送请求!不会创建任何字段,但需要再次填写“描述”。在这种情况下应该没有要求。任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

我在Simple Form github的问题主题here得到了答案。总结一下,问题是提示,验证不是(还是?)正确使用它,解决方案是替换它,例如像这样:

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