class ActionController::Parents::Finder
Used to find the parent resource
@api private
Constants
- FIND_METHOD
Attributes
parent_resource_classes[R]
primary_keys[R]
Public Class Methods
new(*parent_resource_classes)
click to toggle source
@param [Class<ActiveRecord::Base>] parent_resource_classes
# File lib/action_controller/parents/finder.rb, line 15 def initialize(*parent_resource_classes) @parent_resource_classes = parent_resource_classes.flatten assert_responds_to_find_method(@parent_resource_classes) setup_primary_keys end
Public Instance Methods
parent_resource(params)
click to toggle source
Finds the parent resources from the ActionController
params hash @params [Hash] params @return [ActiveRecord::Base, nil]
# File lib/action_controller/parents/finder.rb, line 24 def parent_resource(params) key = find_primary_key(params) return nil unless key class_by_key(key).public_send(FIND_METHOD, params.fetch(key)) end
Private Instance Methods
assert_responds_to_find_method(classes)
click to toggle source
# File lib/action_controller/parents/finder.rb, line 32 def assert_responds_to_find_method(classes) res = classes.find { |c| !c.respond_to?(FIND_METHOD) } unless res.nil? fail NoFindMethodError, "Parent resource #{res} doesn't respond to #{FIND_METHOD.inspect}" end end
class_by_key(key)
click to toggle source
# File lib/action_controller/parents/finder.rb, line 52 def class_by_key(key) primary_keys[key.to_s] end
find_primary_key(params)
click to toggle source
Looks for the primary key of any of the parent resources in the params hash @params [Hash] params @return [String, nil]
# File lib/action_controller/parents/finder.rb, line 44 def find_primary_key(params) params.keys.detect { |key| valid_primary_key?(key) } end
setup_primary_keys()
click to toggle source
# File lib/action_controller/parents/finder.rb, line 56 def setup_primary_keys @primary_keys = parent_resource_classes.each_with_object({}) do |klass, hsh| hsh[klass.to_s.foreign_key] = klass end end
valid_primary_key?(key)
click to toggle source
# File lib/action_controller/parents/finder.rb, line 48 def valid_primary_key?(key) !class_by_key(key).nil? end