Class: RailsBestPractices::Reviews::UseModelAssociationReview
- Inherits:
-
Review
- Object
- Core::Check
- Review
- RailsBestPractices::Reviews::UseModelAssociationReview
- Defined in:
- lib/rails_best_practices/reviews/use_model_association_review.rb
Overview
review a controller file to make sure to use model association instead of foreign key id assignment.
See the best practice details here rails-bestpractices.com/posts/2-use-model-association.
Implementation:
Review process:
check model define nodes in all controller files,
if there is an attribute assignment node with message xxx_id=,
and after it, there is a call node with message :save or :save!,
and the subjects of attribute assignment node and call node are the same,
then model association should be used instead of xxx_id assignment.
Constant Summary
Constants inherited from Core::Check
Core::Check::CONTROLLER_FILES, Core::Check::HELPER_FILES, Core::Check::MAILER_FILES, Core::Check::MIGRATION_FILES, Core::Check::MODEL_FILES, Core::Check::NODE_TYPES, Core::Check::PARTIAL_VIEW_FILES, Core::Check::ROUTE_FILE, Core::Check::SCHEMA_FILE, Core::Check::VIEW_FILES
Instance Attribute Summary
Attributes inherited from Core::Check
Instance Method Summary collapse
- #interesting_files ⇒ Object
- #interesting_nodes ⇒ Object
-
#start_defn(node) ⇒ Object
check method define nodes to see if there are some attribute assignments that can use model association instead.
- #url ⇒ Object
Methods inherited from Review
#equal?, #model_associations, #model_attributes, #models, #remember_variable_use_count, #reset_variable_use_count, #variable, #variable_use_count
Methods inherited from Core::Check
#add_error, #initialize, #method_missing, #node_end, #node_start
Constructor Details
This class inherits a constructor from RailsBestPractices::Core::Check
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class RailsBestPractices::Core::Check
Instance Method Details
#interesting_files ⇒ Object
27 28 29 |
# File 'lib/rails_best_practices/reviews/use_model_association_review.rb', line 27 def interesting_files CONTROLLER_FILES end |
#interesting_nodes ⇒ Object
23 24 25 |
# File 'lib/rails_best_practices/reviews/use_model_association_review.rb', line 23 def interesting_nodes [:defn] end |
#start_defn(node) ⇒ Object
check method define nodes to see if there are some attribute assignments that can use model association instead.
it will check attribute assignment node with message xxx_id=, and call node with message :save or :save!
-
if there is an attribute assignment node with message xxx_id=, then remember the subject of attribute assignment node.
-
after assignment, if there is a call node with message :save or :save!, and the subject of call node is one of the subject of attribute assignment node, then the attribute assignment should be replaced by using model association.
40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/rails_best_practices/reviews/use_model_association_review.rb', line 40 def start_defn(node) @attrasgns = {} node.recursive_children do |child| case child.node_type when :attrasgn attribute_assignment(child) when :call call_assignment(child) else end end @attrasgns = nil end |
#url ⇒ Object
19 20 21 |
# File 'lib/rails_best_practices/reviews/use_model_association_review.rb', line 19 def url "http://rails-bestpractices.com/posts/2-use-model-association" end |