dynamic_matchers.rb: 55: dans method_missing: méthode non définie `migration_error = ‘pour ActiveRecord :: Base: Class (NoMethodError)

Je suis sous Windows. Ruby v.1.9.3p392 / Rails v. 3.2.13 – Ceci est le projet demo_app du 2ème chapitre du didacticiel Ruby on Rails de Michael Hart.

Cette erreur survient lorsque j’émets des ‘ rails Générer Scaffold Nom d’utilisateur: Chaîne E- mail: Chaîne ‘ Une idée de la façon de résoudre ce problème?

C:\ruby\rails_projects\demo_app>rails generate scaffold User name:ssortingng email:s sortingng invoke active_record C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/act ive_record/dynamic_matchers.rb:55:in `method_missing': undefined method `migrati on_error=' for ActiveRecord::Base:Class (NoMethodError) from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3 .2.13/lib/active_record/railtie.rb:66:in `block (3 levels) in ' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3 .2.13/lib/active_record/railtie.rb:65:in `each' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3 .2.13/lib/active_record/railtie.rb:65:in `block (2 levels) in ' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport- 3.2.13/lib/active_support/lazy_load_hooks.rb:36:in `instance_eval' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport- 3.2.13/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport- 3.2.13/lib/active_support/lazy_load_hooks.rb:43:in `block in run_load_hooks' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport- 3.2.13/lib/active_support/lazy_load_hooks.rb:42:in `each' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport- 3.2.13/lib/active_support/lazy_load_hooks.rb:42:in `run_load_hooks' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3 .2.13/lib/active_record/base.rb:720:in `' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1 3/lib/rails/generators/named_base.rb:166:in `pluralize_table_names?' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1 3/lib/rails/generators/named_base.rb:114:in `table_name' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3 .2.13/lib/rails/generators/active_record/model/model_generator.rb:17:in `create_ migration_file' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/command.rb:27:in `run' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/invocation.rb:120:in `invoke_command' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/invocation.rb:127:in `block in invoke_all' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/invocation.rb:127:in `each' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/invocation.rb:127:in `map' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/invocation.rb:127:in `invoke_all' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/group.rb:233:in `dispatch' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/invocation.rb:109:in `invoke' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/group.rb:278:in `block in _invoke_for_class_method' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/shell.rb:74:in `with_padding' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/group.rb:267:in `_invoke_for_class_method' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/group.rb:150:in `_invoke_from_option_orm' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/command.rb:27:in `run' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/invocation.rb:120:in `invoke_command' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/invocation.rb:127:in `block in invoke_all' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/invocation.rb:127:in `each' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/invocation.rb:127:in `map' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/invocation.rb:127:in `invoke_all' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/group.rb:233:in `dispatch' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/thor-0.18.1/li b/thor/base.rb:439:in `start' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1 3/lib/rails/generators.rb:171:in `invoke' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1 3/lib/rails/commands/generate.rb:12:in `' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport- 3.2.13/lib/active_support/dependencies.rb:251:in `require' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport- 3.2.13/lib/active_support/dependencies.rb:251:in `block in require' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport- 3.2.13/lib/active_support/dependencies.rb:236:in `load_dependency' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport- 3.2.13/lib/active_support/dependencies.rb:251:in `require' from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1 3/lib/rails/commands.rb:29:in `' from bin/rails:4:in `require' from bin/rails:4:in `' 

dynamic_matchers.rb

 module ActiveRecord module DynamicMatchers def respond_to?(method_id, include_private = false) if match = DynamicFinderMatch.match(method_id) return true if all_atsortingbutes_exists?(match.atsortingbute_names) elsif match = DynamicScopeMatch.match(method_id) return true if all_atsortingbutes_exists?(match.atsortingbute_names) end super end private # Enables dynamic finders like User.find_by_user_name(user_name) and # User.scoped_by_user_name(user_name). Refer to Dynamic atsortingbute-based finders # section at the top of this file for more detailed information. # # It's even possible to use all the additional parameters to +find+. For example, the # full interface for +find_all_by_amount+ is actually find_all_by_amount(amount, options). # # Each dynamic finder using scoped_by_* is also defined in the class after it # is first invoked, so that future attempts to use it do not run through method_missing. def method_missing(method_id, *arguments, &block) if match = (DynamicFinderMatch.match(method_id) || DynamicScopeMatch.match(method_id)) atsortingbute_names = match.atsortingbute_names super unless all_atsortingbutes_exists?(atsortingbute_names) if !(match.is_a?(DynamicFinderMatch) && match.instantiator? && arguments.first.is_a?(Hash)) && arguments.size < attribute_names.size method_trace = "#{__FILE__}:#{__LINE__}:in `#{method_id}'" backtrace = [method_trace] + caller raise ArgumentError, "wrong number of arguments (#{arguments.size} for #{attribute_names.size})", backtrace end if match.respond_to?(:scope?) && match.scope? self.class_eval < atsortingbutes) # scoped(:conditions => atsortingbutes) end # end METHOD send(method_id, *arguments) elsif match.finder? options = if arguments.length > atsortingbute_names.size arguments.extract_options! else {} end relation = options.any? ? scoped(options) : scoped relation.send :find_by_atsortingbutes, match, atsortingbute_names, *arguments, &block elsif match.instantiator? scoped.send :find_or_instantiator_by_atsortingbutes, match, atsortingbute_names, *arguments, &block end else super end end # Similar in purpose to +expand_hash_conditions_for_aggregates+. def expand_atsortingbute_names_for_aggregates(atsortingbute_names) atsortingbute_names.map { |atsortingbute_name| unless (aggregation = reflect_on_aggregation(atsortingbute_name.to_sym)).nil? aggregate_mapping(aggregation).map do |field_attr, _| field_attr.to_sym end else atsortingbute_name.to_sym end }.flatten end def all_atsortingbutes_exists?(atsortingbute_names) (expand_atsortingbute_names_for_aggregates(atsortingbute_names) - column_methods_hash.keys).empty? end def aggregate_mapping(reflection) mapping = reflection.options[:mapping] || [reflection.name, reflection.name] mapping.first.is_a?(Array) ? mapping : [mapping] end end end 

ok, alors quelqu’un d’autre a été capable de trouver la solution à ce problème et je le partagerai ici au cas où quelqu’un d’autre le rencontrerait.

Apparemment, l’application que je créais générait une ancienne version de rails, même si mes versions de rails étaient récentes. 3.2.13

Par conséquent, mon fichier config / application.rb était complètement différent d’une version de rails 3.2.13. Après le fichier application.rb a été remplacé. Les erreurs ont été corrigées.

Pour éviter cette erreur, vous pouvez utiliser rvm ou pik si vous êtes un utilisateur Windows pour contrôler votre version actuelle. Vous pouvez spécifier la version de vos rails lors de la création d’une nouvelle application “rails 3.2.13 your_app”, ou désinstaller toutes les versions de rails et installer simplement celle dont vous avez besoin:

rails de désinstallation gem -Choisir toutes les versions

gem install rails –version ‘= 3.2.13’

Merci pour le conseil (+1), j’ai eu le même problème …

Créé initialement l’application avec une version plus ancienne des rails et l’a heurté à la dernière (3.2.13) qui a cassé mon matériel.

Tout ce qu’il fallait, c’était append require "rails/all" au début de config/application.rb

J’ai eu un problème similaire qui se plaignait d’une méthode non définie: «has_many». J’ai passé un moment à sortingpoter des versions rbuy et rails et des gemmes avant de me rendre compte du problème … les espaces supplémentaires avant has_many!

J’avais copié l’ancien code depuis un autre endroit (Evernote, qui utilise toutes sortes de formats bizarres) et je ne réalisais pas que les détails d’espaces blancs pouvaient gâcher comme ça. La suppression des espaces et leur réinsertion manuelle ont permis de résoudre le problème.

(Ce n’est pas vraiment une réponse à la question initiale, mais mes recherches m’ont amené ici et pourraient conduire d’autres personnes ici.)