1

据我所知,对于之前遇到此问题的人来说,我的问题应该很容易回答......

我在 Rails 中有一个注册表单,它应该突出显示单击提交按钮时未正确完成的字段(它还应该显示相关的错误消息)。该表单仅包含输入字段和一个复选框。虽然表单的每个部分都正确显示了错误,但当用户尝试在未选中复选框的情况下提交表单时,复选框标签未正确突出显示为红色。

当复选框未选中时,我应该在我的代码中修改什么以突出显示复选框标签?

这是视图代码:

<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', object: f.object %>

  <%= f.label :name %>
  <%= f.text_field :name %>

  <%= f.label :email %>
  <%= f.text_field :email %>

  <%= f.label :password %>
  <%= f.password_field :password %>

  <%= f.label :password_confirmation, "Password confirmation" %>
  <%= f.password_field :password_confirmation %>

  <br>
  <%= f.check_box :terms_of_service %>
  <label_for="user_terms_of_service">I agree to the <%= link_to "Terms of Service", policies_path %>
  </label>
  <br><br>

  <%= f.submit "Create my account", :class => "btn btn-large btn-primary" %>
<% end %>

此外,这是我在表单提交不正确后使用 Firebug 看到的复选框 - 问题是带有 class="field_with_errors" 的 div 放在复选框标签之前。

<br>
<input type="hidden" value="0" name="user[terms_of_service]">
<div class="field_with_errors">
<input id="user_terms_of_service" type="checkbox" value="1" name="user[terms_of_service]">
</div>
<label_for="user_terms_of_service">

谢谢你的帮助,亚历山德拉

4

2 回答 2

2

我使用表单的方法是尽可能尝试使用 rails 标准,例如

添加到您的用户模型:

validates_acceptance_of :terms
attr_accessible :terms

在你看来,

<%= form_for @user do |f| %>
  ...
  <%= f.check_box :terms %>
  ...
<% end %>

实际上,除非您想授予未接受服务条款的用户访问权限,否则您实际上不需要在 users 表中添加额外的列,这些用户......不存在,因为他们无法完成注册。

于 2012-09-19T02:28:05.173 回答
1

标签语法不正确。尝试

<%= f.label :user_terms_of_service, "I agree to the #{link_to 'Terms of Service', policies_path}.".html_safe %>
于 2012-09-19T01:38:55.923 回答