加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在内联而不是在页面顶部显示验证错误

发布时间:2020-12-17 03:56:15 所属栏目:百科 来源:网络整理
导读:我试图让我的用户模型验证错误显示内联其相应的表单字段.我正在使用bootstrap和设计.我有客户端验证,所以它不会让你提交注册表单,直到满足大多数验证.问题是当用户通过omniauth与facebook注册时. Omniauth将采用facebook给我的字段并将其用于用户,但facebook
我试图让我的用户模型验证错误显示内联其相应的表单字段.我正在使用bootstrap和设计.我有客户端验证,所以它不会让你提交注册表单,直到满足大多数验证.问题是当用户通过omniauth与facebook注册时. Omniauth将采用facebook给我的字段并将其用于用户,但facebook不提供的字段会在页面顶部引发难看的错误.我一直试图找到一种方法让那些内联显示.

这是我的用户模型:

class User < ActiveRecord::Base

    has_many :bills,:dependent => :destroy

    validates :cell_phone,presence: true
    validates :cell_phone,length: { is: 10 }
    validates :cell_phone,:numericality => {:only_integer => true}
    validates :first_name,presence: true
    validates :last_name,presence: true
    validates :terms,presence: true

    geocoded_by :last_sign_in_ip
    after_validation :geocode


    # Include default devise modules. Others available are:
    # :confirmable,:lockable,:timeoutable and :omniauthable
    devise :database_authenticatable,:registerable,:omniauthable,:recoverable,:rememberable,:trackable,:validatable



    def ability
    @ability ||= Ability.new(self)
    end

    delegate :can?,:cannot?,:to => :ability



    def self.from_omniauth(auth)
        where(auth.slice(:sprovider,:uid)).first_or_create do |user|
            user.sprovider = auth.provider
            user.uid = auth.uid
            user.first_name = auth.info.first_name
            user.last_name = auth.info.last_name
            user.email = auth.info.email
            user.cell_phone = auth.info.cell_phone
            user.avatar = auth.info.image
        end
    end

这是设计注册表单,我希望内联错误出现在:

<div class="row sign_in">
  <div class="col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">


    <%= form_for(resource,as: resource_name,url: registration_path(resource_name)) do |f| %>
    <%= devise_error_messages! %>


  <div class="row">
    <div class="form-group">
      <div class="col-md-6">  
        <%= f.text_field :first_name,autofocus: true,class:'form-control',placeholder:'First Name *',:required => true %>
      </div>

      <div class="col-md-6">
        <%= f.text_field :last_name,placeholder:'Last Name*',:required => true %>
      </div>
    <div class="row">
    </div>
  </div>
</div>
  <div class="form-group">
      <%= f.phone_field :cell_phone,placeholder:'Mobile Number*(Solely for notification purposes)',:required => true,:maximum => 10,:minimum => 10 %>
  </div>

   <div class="form-group">
      <%= f.email_field :email,placeholder:'Email*',:required => true %>
  </div>

  <% if f.object.password_required? %>
    <div class="form-group">
      <% if @validatable %><i></i><% end %>
      <%= f.password_field :password,autocomplete: "off",placeholder:'Password* (8 characters minimum)',id:"myPassword",:required => true %>
    </div>

    <div class="form-group">
      <%= f.password_field :password_confirmation,placeholder:'Password Confirmation*',:required => true %>
    </div>
  <% end %>
  <div class="form-group">
    <%= f.check_box :terms%>
    I have read and agreed the User

<a href="#" data-toggle="modal" data-target=".bs-example-modal-sm">Terms and Conditions</a>
         <div class="modal fade bs-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
          <div class="modal-dialog modal-md">
            <div class="modal-content">
              <p>
  Lorem ipsum dolor sit amet,consectetur adipiscing elit. Donec pretium libero eget posuere ornare. Donec rutrum augue eu erat fringilla posuere. Aenean tempus dui a erat facilisis posuere. Pellentesque eget nulla et turpis mollis egestas. Donec molestie consequat ultricies. Vivamus in feugiat risus. Ut a quam id sapien fringilla efficitur eget in justo. Suspendisse tincidunt libero metus. Sed ultrices auctor diam mattis pretium. Integer in aliquam dui. Praesent pulvinar ante non urna consectetur,eget porta lorem porta. Etiam ac orci pretium,faucibus neque vel,egestas velit. Nullam condimentum ultrices imperdiet. Maecenas vel nisi commodo,bibendum purus dapibus,porttitor felis.

Nullam nec porta lectus. Vivamus porta lobortis justo,sed cursus arcu tincidunt et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque a rhoncus tellus. Ut mollis orci quis lacus consequat,quis varius nunc auctor. Ut elit ligula,bibendum quis mauris a,ornare elementum dui. Phasellus commodo ipsum eu augue consequat porta.</p>
            </div>
          </div>
        </div>
        </div>

  <div><i class="icon-heart"></i></div>
    <%= f.submit 'Sign up',class:'btn btn-primary btn-block' %> 

      <% end %>

  </div>
</div>
</body>
</html>

这是用facebook按钮登录的:

<div><i class="icon-heart"></i></div>
    <%= f.submit 'Sign in',class:'btn btn-primary btn-block' %> 
    <%= link_to "Sign in with facebook",user_omniauth_authorize_path(:facebook),class:'btn btn-primary btn-block' %>
    <br>
    <div align="center"> 
</div>

任何有关如何显示这些验证错误的帮助都非常感谢.谢谢

解决方法

您可以尝试向验证添加条件,即在facebook id存在时不验证某些属性(意味着用户从Facebook注册)

validates :first_name,presence: true,if: Proc.new {|u| u.facebookid.nil? }

关于表单中的错误,您可以删除显示所有错误的顶部部分,并使用

<%= user.errors[:first_name] %>

而是靠近你的领域.您可以随时访问属性(表单字段)错误

object.errors[:attributename]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读