Rails Trigger Error
Contents |
here for a quick overview of the site Help Center Detailed answers to any questions you might have Meta Discuss the workings and policies of this site About Us Learn more about Stack Overflow the company Business Learn more about rails raise standarderror hiring developers or posting ads with us Stack Overflow Questions Jobs Documentation Tags Users Badges Ask
Rails Raise Custom Error
Question x Dismiss Join the Stack Overflow Community Stack Overflow is a community of 6.2 million programmers, just like you, helping each other. rails raise exception in model Join them; it only takes a minute: Sign up Trigger a HTTP error in Rails up vote 17 down vote favorite 2 I'm trying to call a custom instance of a 403 HTTP error in Rails but I can't rails exception types seem to figure out how to do this... I have several user authentication roles and basically if a role tries to browse to an area that it is not authorised to visit I want to display a 403 instead of just redirecting the user. How do I do this? ruby-on-rails http-status-code-403 http-error share|improve this question asked Mar 7 '10 at 3:22 Ganesh Shankar 2,64572954 I think the accepted answer should be changed -- this one is
Rails Standard Error
a better solution, since it's the correct error code as well as a better presentation to the end user: stackoverflow.com/questions/9130191/… –Stewart Johnson Apr 15 '13 at 13:19 add a comment| 2 Answers 2 active oldest votes up vote 37 down vote accepted In your controller code add the following line: render :status => :forbidden, :text => "Forbidden fruit" Refer to this page for http code to symbol mapping. share|improve this answer edited Feb 6 '14 at 19:43 swilliams 27.7k2080122 answered Mar 7 '10 at 3:31 Harish Shetty 50k11116165 Fantastic! Thanks heaps... FYI you're missing a comma after :forbidden –Ganesh Shankar Mar 7 '10 at 3:41 Thanks I have updated the answer and added a reference to http code to ruby symbol list. –Harish Shetty Mar 7 '10 at 3:52 thanks! was about to ask something just like this –Kevin Davis Apr 12 '11 at 9:18 1 The old url to the code mapping is gone. I updated it to point to apidock instead. apidock.com/rails/ActionController/Base/… –swilliams Feb 6 '14 at 19:43 add a comment| up vote 4 down vote Just for posterity: I think return 403.html is a nicer solution, because it generates a standard page, just like the 404. The above solution only displays the text given. And because someone in good practice can only go to a forbidden page by typing or clicking a
and rescuing custom errors in a Rails application. It's often useful to map custom Ruby errors to HTTP response status codes and have Rails render the appropriate HTML error rails exceptions pages. For example, you might have a controller that is acting as a rails raise internal server error simple proxy to a third party service such as Twitter or Facebook, and you need any of the HTTP errors encountered
Rails Raise 403
when calling those sites to be handled natively by your app. Another use case would be in a Service-oriented architecture (SOA), where you want any errors in your back end services propagated to your http://stackoverflow.com/questions/2395043/trigger-a-http-error-in-rails front end web application. In this post we'll demonstrate rescuing status errors in an imaginary proxy controller using the awesome Faraday gem. For the sake of brevity we've omitted the inclusion of tests though in the wild we'd build such a feature using TDD and our favourite test weapon, RSpec. Not Found To start, let's handle basic 404 Not Found errors that occur when calling a service. For this https://wearestac.com/blog/raising-and-rescuing-custom-errors-in-rails we'll need a custom error class that extends StandardError. # lib/errors/not_found.rb module Errors class NotFound < StandardError; end end Faraday provides a neat Rack-esque middleware feature. By creating our own custom middleware we can catch any Faraday 404s and raise our custom error. Furthermore, we can re-use the middleware anytime we need the same behaviour. # lib/errors/raise_error.rb module Errors class RaiseError < Faraday::Response::Middleware def on_complete(env) raise Errors::NotFound if env[:status] == 404 end end end Now for the proxy controller. # app/controllers/proxy_controller.rb class ProxyController < ApplicationController def index connection = Faraday.new(:url => 'http://someservice') do |f| f.adapter Faraday.default_adapter f.use Errors::RaiseError # Include custom middleware end response = connection.get('/some/resource') render :text => response.body end end At this point any NotFounds raised will still result in a 500 Internal Server Error in Rails. To alleviate this let's create a module that uses rescue_from, catches any custom NotFounds and renders the default 404 page. # lib/errors/rescue_error.rb module Errors module RescueError def self.included(base) base.rescue_from Errors::NotFound do |e| render "public/404", :status => 404 end end end end We can then mixin RescueError into our application controller and handle NotFounds app-wide. # app/controllers/application_controller.rb class ApplicationController < ActionController::Base include Errors::RescueError end Unprocessible Entity and Internal Server Error Next, let's create custom errors
succeed as one atomic action. The classic example is a transfer between two accounts where you can only have a deposit if the withdrawal succeeded and vice versa. Transactions enforce the integrity of the database and guard the data http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html against program errors or database break-downs. So basically you should use transaction blocks whenever you have a number of statements that must be executed together or not at all. For example: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues/339 ActiveRecord::Base.transaction do david.withdrawal(100) mary.deposit(100) end This example will only take money from David and give it to Mary if neither withdrawal nor deposit raise an exception. Exceptions will force a rails raise ROLLBACK that returns the database to the state before the transaction began. Be aware, though, that the objects will not have their instance data returned to their pre-transactional state. Different Active Record classes in a single transaction Though the transaction class method is called on some Active Record class, the objects within the transaction block need not all be instances of that rails trigger error class. This is because transactions are per-database connection, not per-model. In this example a balance record is transactionally saved even though transaction is called on the Account class: Account.transaction do balance.save! account.save! end The transaction method is also available as a model instance method. For example, you can also do this: balance.transaction do balance.save! account.save! end Transactions are not distributed across database connections A transaction acts on a single database connection. If you have multiple class-specific databases, the transaction will not protect interaction among them. One workaround is to begin a transaction on each class whose models you alter: Student.transaction do Course.transaction do course.enroll(student) student.units += course.units end end This is a poor solution, but fully distributed transactions are beyond the scope of Active Record. save and destroy are automatically wrapped in a transaction Both #save and #destroy come wrapped in a transaction that ensures that whatever you do in validations or callbacks will happen under its protected cover. So you can use validations to check for values that the transaction depends on or you can raise exceptions in the callbacks to rollback, i
Sign in Pricing Blog Support Search GitHub This repository Watch 57 Star 732 Fork 380 rails-sqlserver/activerecord-sqlserver-adapter Code Issues 31 Pull requests 9 Projects 0 Wiki Pulse Graphs New issue Error when insert data into table with trigger enabled: #339 Closed hwwan80 opened this Issue Jun 3, 2014 · 12 comments Labels None yet Milestone No milestone Assignees No one assigned 11 participants hwwan80 commented Jun 3, 2014 After i upgrade to 4.0.0, the following error exception occured when inserting data to a table 👍 ActiveRecord::StatementInvalid (TinyTds::Error: The target table 'tableName' of the DML statement cannot have any enabled triggers if the statement contains an OUTPUT clause without INTO clause.: EXEC sp_executesql N'INSERT INTO [tableName] ([column1], [column2]) OUTPUT inserted.primaryKeyColumn VALUES (@0, @1)', N'@0 varchar(200), @1 tinyint, @0 = N'Unit Testing', @1 = 23): activerecord-sqlserver-adapter (4.0.0) lib/active_record/connection_adapters/sqlserver/database_statements.rb:419:in `each' activerecord-sqlserver-adapter (4.0.0) lib/active_record/connection_adapters/sqlserver/database_statements.rb:419:in `handle_to_names_and_values_dblib' activerecord-sqlserver-adapter (4.0.0) lib/active_record/connection_adapters/sqlserver/database_statements.rb:408:in `handle_to_names_and_values' activerecord-sqlserver-adapter (4.0.0) lib/active_record/connection_adapters/sqlserver/database_statements.rb:381:in `_raw_select' activerecord-sqlserver-adapter (4.0.0) lib/active_record/connection_adapters/sqlserver/database_statements.rb:376:in `block in raw_select' activerecord (4.0.5) lib/active_record/connection_adapters/abstract_adapter.rb:442:in `block in log' activesupport (4.0.5) lib/active_support/notifications/instrumenter.rb:20:in `instrument' activerecord (4.0.5) lib/active_record/connection_adapters/abstract_adapter.rb:437:in `log' activerecord-sqlserver-adapter (4.0.0) lib/active_record/connection_adapters/sqlserver/database_statements.rb:376:in `raw_select' activerecord-sqlserver-adapter (4.0.0) lib/active_record/connection_adapters/sqlserver/database_statements.rb:359:in `do_exec_query' activerecord-sqlserver-adapter (4.0.0) lib/active_recor