Ruby on rails - 简单的表单不显示无线电选择的错误。其他错误显示正常

时间:2016-06-11 10:11:03

标签: ruby-on-rails error-handling devise simple-form

我有一个包含4个元素的用户注册表(Devise);用户名,电子邮件,密码和'用户类型'。用户类型是布尔值,在表单上显示为单选按钮。

用户名,电子邮件和密码的错误显示没有问题,但如果用户没有选择其中一个单选按钮,则不会显示任何错误。验证已到位,如果没有选择任何一个单选按钮,表单将不会发送,但我没有错误。

表格:

<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
            <%= f.error_notification %>
        <div class="role-selector">
            <p class="type-sel-txt"><%= t('front.whattype') %></p>
            <label for="artistuser">
                <%= f.radio_button :artist, "1", :id => "artistuser" %>
                <span class="artistuser-sel"><%= t('front.bandm') %></span>
            </label>
            <label for="eventuser">
                <%= f.radio_button :artist, "0", :id => "eventuser" %>
                <span class="eventuser-sel"> <%= t('front.evento') %></span>
            </label>
        </div>
        <%= f.input :username, required: true, autofocus: true, placeholder: t('forms.login.user'), label: false %>
        <%= f.input :email, required: true, placeholder: t('forms.login.email'), label: false %>
        <%= f.input :password, required: true, placeholder: t('forms.login.password'), label: false %>
        <div id="passcheck"></div>
        <%= f.button :submit, t("forms.login.signup"), id: "register-btn" %>
    <% end %>

User.rb:

  validates_inclusion_of :artist, in: [true, false], on: :create

注册工作没有问题,我唯一的问题是错误没有显示。我不确定是否有必要再粘贴我的代码,但如果是这样,我会根据需要进行更新。

2 个答案:

答案 0 :(得分:4)

与处理输入本身(标签标签,错误消息标签)之外的所有相关标签的简单表单f.input相反,f.radio_button仅处理输入字段,因为它实际上是{{ 3}},而不是简单的形式。

默认情况下,当字段附加了一些错误时,简单表单会生成带有“错误”类的 span。我猜你必须自己渲染范围,方法与字段标签类似:

<div class="role-selector">
  <p class="type-sel-txt"><%= t('front.whattype') %></p>
  <label for="artistuser">
     <%= f.radio_button :artist, "1", :id => "artistuser" %>
     <span class="artistuser-sel"><%= t('front.bandm') %></span>
  </label>
  <label for="eventuser">
     <%= f.radio_button :artist, "0", :id => "eventuser" %>
     <span class="eventuser-sel"> <%= t('front.evento') %></span>
  </label>

  <!-- show error for the artist attribute, if present -->
  <% if resource.errors['artist'].present? %>
    <span class="error"><%= resource.errors['artist'] %></span>
  <% end %>
</div>

答案 1 :(得分:1)

我无法弄清楚发生了什么,但你可以尝试一些黑客攻击

<%= f.radio_button :artist, "1", :id => "artistuser", :selected => f.object.artist %>

然后你可以检查它是否存在

<% if f.object.artist.blank? %>
  Display Your Error Message

只是一个粗略的想法,但只需稍加修改即可让它发挥作用,让我知道是否有任何问题。