application_conroller.rb
में निम्नलिखित जोड़ें:
# You want to get exceptions in development, but not in production.
unless Rails.application.config.consider_all_requests_local
rescue_from ActionController::RoutingError, with: -> { render_404 }
end
def render_404
respond_to do |format|
format.html { render template: 'errors/not_found', status: 404 }
format.all { render nothing: true, status: 404 }
end
end
मैं आमतौर पर भी निम्न अपवादों को बचाने, लेकिन यह आप पर निर्भर है:
rescue_from ActionController::UnknownController, with: -> { render_404 }
rescue_from ActiveRecord::RecordNotFound, with: -> { render_404 }
त्रुटियों नियंत्रक बनाएँ:
class ErrorsController < ApplicationController
def error_404
render 'errors/not_found'
end
end
फिर routes.rb
में
unless Rails.application.config.consider_all_requests_local
# having created corresponding controller and action
get '*path', to: 'errors#error_404', via: :all
end
और अंत में बनाने के लिए है not_found.html.haml
(या जो भी टेम्पलेट इंजन का उपयोग) /views/errors/
के तहत:
%span 404
%br
Page Not Found
स्रोत
2014-09-15 06:34:56
इस रेल 4.2.5 में काम नहीं करता। मुझे लगता है कि ऐसा इसलिए है क्योंकि किसी भी नियंत्रक कोड को चलाने से पहले अपवाद को एक्शनडिस्चैच द्वारा उठाया जाता है। – depquid
@depquid मैंने इसे Rails 4.0.x के समय लिखा था, लेकिन रेलवे 4.2.5 के साथ इसका परीक्षण किया है - मुझे लगता है कि आपने मार्ग नहीं जोड़ा है और 'error_controller.rb' नहीं बनाया है :) यदि ऐसा है - कृपया डाउनवोट को वापस लेना सुनिश्चित करें, जब तक कि आपके पास –
छोड़ने के अधिक कारण न हों, क्षमा करें, मैंने मार्ग को सही तरीके से सेट नहीं किया है। लेकिन क्यों है, 'action_ontroller :: routingError से बचाव करें: -> {render_404} 'यदि आप सीधे कार्रवाई पर रूटिंग कर रहे हैं? – depquid