Class: AbstractController::Base

Overview

AbstractController::Base is a low-level API. Nobody should be using it directly, and subclasses (like ActionController::Base) are expected to provide their own render method, since rendering means different things depending on the context.

A list of method names that should be considered actions. This includes all public instance methods on a controller, less any internal methods (see #internal_methods), adding back in any methods that are internal, but still exist on the class itself. Finally, #hidden_actions are removed.

Returns

array - A list of all methods that should be considered actions.

63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

# File 'actionpack/lib/abstract_controller/base.rb', line 63defaction_methods@action_methods||=begin# All public instance methods of this class, including ancestorsmethods=(public_instance_methods(true)-# Except for public instance methods of Base and its ancestorsinternal_methods+# Be sure to include shadowed public instance methods of this classpublic_instance_methods(false)).uniq.map{|x|x.to_s}-# And always exclude explicitly hidden actionshidden_actions.to_a# Clear out AS callback method pollutionmethods.reject{|method|method=~/_one_time_conditions/}endend

Returns

A list of all internal methods for a controller. This finds the first abstract superclass of a controller, and gets a list of all public instance methods on that abstract class. Public instance methods of a controller would normally be considered action methods, so methods declared on abstract classes are being removed. (ActionController::Metal and ActionController::Base are defined as abstract)

Instance Method Details

#available_action?(action_name) ⇒ Boolean

Returns true if a method for the action is available and can be dispatched, false otherwise.

Notice that action_methods.include?("foo") may return false and available_action?("foo") returns true because available action consider actions that are also available through other means, for example, implicit render ones.

The actual method that is called is determined by calling #method_for_action. If no method can handle the action, then an ActionNotFound error is raised.

Returns

self

112
113
114
115
116
117
118
119
120
121
122

# File 'actionpack/lib/abstract_controller/base.rb', line 112defprocess(action,*args)@_action_name=action_name=action.to_sunlessaction_name=method_for_action(action_name)raiseActionNotFound,"The action '#{action}' could not be found for #{self.class.name}"end@_response_body=nilprocess_action(action_name,*args)end