Ruby 在 rails - 简单的表单不显示无线电 select 的错误。其他错误显示正常
Ruby on rails - Simple form not displaying errors for radio select. Other errors display fine
我有一个包含 4 个元素的用户注册表单 (Devise);用户名、电子邮件、密码和 'user type'。用户类型是布尔值,在表单上显示为单选select。
用户名、电子邮件和密码的错误显示没有问题,但如果用户没有select其中一个单选按钮,我不会显示任何错误。验证已到位,如果没有单选按钮之一 selected,表单将不会发送,但我没有收到任何错误。
形式:
<%= 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
注册没有问题,我唯一的问题是没有显示错误。我不确定是否有必要再粘贴我的代码,但如果需要,我会根据需要进行更新。
我无法弄清楚到底发生了什么,但你可以尝试一些破解之类的东西
<%= f.radio_button :artist, "1", :id => "artistuser", :selected => f.object.artist %>
然后你可以检查它是否存在
<% if f.object.artist.blank? %>
Display Your Error Message
只是一个粗略的想法,但稍加修改就可以实现,如果有任何问题,请告诉我。
与简单表单的 f.input
不同,它处理输入本身以外的所有相关标签(标签标签、错误消息标签),f.radio_button
只处理输入字段,因为它实际上是a helper from ActionView
,不是简单的形式。
当字段附加了一些错误时,简单表单默认生成带有 "error" class 的 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>
我有一个包含 4 个元素的用户注册表单 (Devise);用户名、电子邮件、密码和 'user type'。用户类型是布尔值,在表单上显示为单选select。
用户名、电子邮件和密码的错误显示没有问题,但如果用户没有select其中一个单选按钮,我不会显示任何错误。验证已到位,如果没有单选按钮之一 selected,表单将不会发送,但我没有收到任何错误。
形式:
<%= 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
注册没有问题,我唯一的问题是没有显示错误。我不确定是否有必要再粘贴我的代码,但如果需要,我会根据需要进行更新。
我无法弄清楚到底发生了什么,但你可以尝试一些破解之类的东西
<%= f.radio_button :artist, "1", :id => "artistuser", :selected => f.object.artist %>
然后你可以检查它是否存在
<% if f.object.artist.blank? %>
Display Your Error Message
只是一个粗略的想法,但稍加修改就可以实现,如果有任何问题,请告诉我。
与简单表单的 f.input
不同,它处理输入本身以外的所有相关标签(标签标签、错误消息标签),f.radio_button
只处理输入字段,因为它实际上是a helper from ActionView
,不是简单的形式。
当字段附加了一些错误时,简单表单默认生成带有 "error" class 的 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>