我已自定义设计注册表单以显示在我的自定义页面中。我正在主页上显示我的注册表单。 http://awesomescreenshot.com/0815w1h9b0。
我需要在表单顶部显示错误。如果我单击“提交”按钮而不填写字段,则会重定向到“ / users ”页面并显示错误。我需要在我拥有表单的同一页面中显示错误。
application_helper.rb
module ApplicationHelper
def resource_name
:user
end
def resource_class
User
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
end
application_controller.rb
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :authenticate_user!
before_filter :configure_devise_params, if: :devise_controller?
def configure_devise_params
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(:first_name, :last_name, :gender, :dob, :token, :contact_number, :profile_by, :email, :password, :password_confirmation ,:religion_id ,:caste_id ,:sub_caste_id)
end
devise_parameter_sanitizer.for(:account_update) do |u|
u.permit(:first_name, :last_name, :dob, :contact_number, :profile_by, :email, :current_password)
end
end
# REDIRECT USER TO OUR CUSTOM PATH AFTER LOGIN
def after_sign_in_path_for(resource)
root_path
end
def after_update_path_for(resource)
show_profile_path
end
# REDIRECT USER TO OUR CUSTOM PATH AFTER LOGOUT
def after_sign_out_path_for(resource)
root_path
end
end
的routes.rb
Rails.application.routes.draw do
devise_for :users
get '/home'=>'home#index', as: 'home_path'
end
设计视图下的new.html.erb
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<div class="field">
<%= f.hidden_field :token, value: rand(13 ** 13), autofocus: true %>
</div>
<div class="field">
<%= f.label :First_Name %>
<%= f.text_field :first_name, autofocus: true, placeholder: 'Enter First Name' %>
</div>
<div class="field">
<%= f.label :Last_Name %>
<%= f.text_field :last_name, autofocus: true, placeholder: 'Enter Last Name' %>
</div>
<div class="field">
<%= f.label :date_of_birth %>
<%= f.text_field :dob, class: 'datepicker', placeholder: 'Enter Date of Birth' %>
<script type="text/javascript">
$('.datepicker').datepicker()
</script>
</div>
<div class="field">
<%= f.label :gender %>
<%= f.radio_button :gender, '1', :checked => true %> <span class="radio-names">Male</span>
<%= f.radio_button :gender, '2' %><span class="radio-names">Female</span>
</div>
<div class="field">
<%= f.label :email %>
<%= f.email_field :email, autofocus: true, placeholder: 'Enter Email Address' %>
</div>
<div class="field">
<%= f.label :profile_password %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %>
<%= f.password_field :password, autocomplete: "off", placeholder: 'Enter Password' %>
</div>
<div class="field">
<%= f.label :confirm_password %>
<%= f.password_field :password_confirmation, autocomplete: "off", placeholder: 'Enter Confirm Password' %>
</div>
<div class="field">
<%= f.label :register_for %>
<%= f.select :profile_by, [['Myself', 1], ['Dad', 2], ['Mom', 3], ['Brother', 4], ['Sister', 5], ['Relative', 6], ['Son', 7], ['Daughter', 8]],{},{class: 'select_tag'} %>
</div>
<div class="field">
<%= f.label :contact_number %>
<%= f.text_field :contact_number, autofocus: true, placeholder: 'Enter Contact Number +91' %>
</div>
<div class="field">
<%= f.label :Religion %>
<%= f.select :religion_id, options_from_collection_for_select(Religion.all, :id, :religion),{},{class: 'select_tag'} %>
</div>
<div class="field">
<%= f.label :caste %>
<%= f.select :caste_id, options_from_collection_for_select(Caste.all, :id, :caste_name),{},{class: 'select_tag'} %>
</div>
<div class="field">
<%= f.label :subcaste %>
<%= f.select :sub_caste_id, options_from_collection_for_select(Subcaste.all, :id, :sub_caste_name),{},{class: 'select_tag'} %>
</div>
<br>
<br>
<div class="actions">
<%= f.submit "Register", class: 'register_button' %>
</div>
<% end %>
如果在注册过程中发生错误,请帮助我如何在同一页面显示错误。
答案 0 :(得分:0)
您不需要覆盖设计控制器 试试这个:
在lib文件夹中创建类并覆盖设计失败方法,如下所示:
class CustomFailure < Devise::FailureApp
def redirect_url
#new_user_registration_path or your_path
end
def respond
if http_auth?
http_auth
else
redirect
end
end
end
并把这个config / initializers / devise.rb
config.warden do |manager|
manager.failure_app = CustomFailure
end
还有一件事需要自动加载lib文件,如:
config.autoload_paths << Rails.root.join('lib')
将此行放在config / application.rb
答案 1 :(得分:0)
获取错误时,它会从http://localhost:3000/users/sign_up
移至http://localhost:3000/users with errors
并形成。
如果您查看https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb
在registrations_controller.rb
找到create
方法
def create
[..................]
else
set_flash_message! :notice, :"signed_up_but_#{resource.inactive_message}"
expire_data_after_sign_in!
respond_with resource, location: after_inactive_sign_up_path_for(resource)
[..................]
您可以很容易地看到,当出现错误时,它会响应资源,在您的情况下,它是users
。
有两个选项