我有一个相当简单的表格。
<%= form_for([@category_item_value], url: create_category_item_value_path(key_id: item_key.id), method: :post) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :stat %>
<%= f.text_field :value, :value => item_key.value %>
<%= f.hidden_field :key_type, :value => 'item-edit-request' %>
<%= f.submit "Submit" %>
使用此模型
validates :key, length: { maximum: 255 },
exclusion: { in: %w( create edit new update ), message: "%{value} cant be taken." },
format: { with: /\A[a-zA-Z0-9_-]+\z/, message: "only allows letters, numbers and '-'" }
validates :value, length: { maximum: 65000 }
当我提交表单时,key
值在数据库中保留为空或零,因为它稍后会添加。问题是我无法提交表单,因为密钥上的格式验证阻止了我的错误消息“只允许字母,数字和' - '”。
为什么会这样做,我在presence: :true
上没有key
验证,但由于格式验证,我不能让它变成空白。这不是一个问题,而且这种形式过去很好,直到最近我才重新审视它,并注意到表格没有提交。
为什么会这样开始发生?我该如何解决?
答案 0 :(得分:2)
您只需添加allow_blank
选项,否则您的正则表达式确实不匹配,格式验证将失败。有关所有验证通用的验证选项,请参阅rails guides。
因此,以下内容应该有效:
validates :key, length: { maximum: 255 },
exclusion: { in: %w( create edit new update ), message: "%{value} cant be taken." },
format: { with: /\A[a-zA-Z0-9_-]+\z/,
allow_blank: true,
message: "only allows letters, numbers and '-'" }
另一种可能性是将正则表达式更改为可选字符(使用*
而不是+
),如下所示:
...
with: /\A[a-zA-Z0-9_-]*\z/ ,
...