dynamic_matchers.rb:55:在`method_missing':未定义的方法`migration_error ='为ActiveRecord :: Base:Class(NoMethodError)

我在Windows上。 Ruby v.1.9.3p392 / Rails v。3.2.13 – 这是Michael Hart的Ruby on Rails教程第2章中的demo_app项目。

这个错误出现时,我发出“ 轨生成脚手架用户名:string电子邮件:string ”任何想法如何解决这个问题?

C:\ruby\rails_projects\demo_app>rails generate scaffold User name:string email:s tring 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 <class:Railtie>' 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 <class:Railtie>' 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 `<top (required)>' 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 `<top (required)>' 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 `<top (required)>' from bin/rails:4:in `require' from bin/rails:4:in `<main>' 

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_attributes_exists?(match.attribute_names) elsif match = DynamicScopeMatch.match(method_id) return true if all_attributes_exists?(match.attribute_names) end super end private # Enables dynamic finders like <tt>User.find_by_user_name(user_name)</tt> and # <tt>User.scoped_by_user_name(user_name). Refer to Dynamic attribute-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 <tt>find_all_by_amount(amount, options)</tt>. # # Each dynamic finder using <tt>scoped_by_*</tt> 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)) attribute_names = match.attribute_names super unless all_attributes_exists?(attribute_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 <<-METHOD, __FILE__, __LINE__ + 1 def self.#{method_id}(*args) # def self.scoped_by_user_name_and_password(*args) attributes = Hash[[:#{attribute_names.join(',:')}].zip(args)] # attributes = Hash[[:user_name, :password].zip(args)] # scoped(:conditions => attributes) # scoped(:conditions => attributes) end # end METHOD send(method_id, *arguments) elsif match.finder? options = if arguments.length > attribute_names.size arguments.extract_options! else {} end relation = options.any? ? scoped(options) : scoped relation.send :find_by_attributes, match, attribute_names, *arguments, &block elsif match.instantiator? scoped.send :find_or_instantiator_by_attributes, match, attribute_names, *arguments, &block end else super end end # Similar in purpose to +expand_hash_conditions_for_aggregates+. def expand_attribute_names_for_aggregates(attribute_names) attribute_names.map { |attribute_name| unless (aggregation = reflect_on_aggregation(attribute_name.to_sym)).nil? aggregate_mapping(aggregation).map do |field_attr, _| field_attr.to_sym end else attribute_name.to_sym end }.flatten end def all_attributes_exists?(attribute_names) (expand_attribute_names_for_aggregates(attribute_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 

好的,所以别人能找到解决这个问题的办法,我会在这里分享,以防万一它出现给别人。

显然,我正在创建的应用程序生成一个旧的rails版本,即使我的rails版本设置为最近的一个。 3.2.13

因此我的config / application.rb文件完全不同于rails 3.2.13版本。 在application.rb文件被替换之后。 错误是固定的。

为了避免这个错误,你可以使用rvm或pik,如果你是一个windows用户来控制你的当前版本。 您可以在创建新的应用程序“rails 3.2.13 your_app”时指定您的rails版本,或者卸载所有rails版本并安装所需的版本:

宝石卸载rails – 选择所有版本

gem install rails –version'= 3.2.13'

感谢您的建议(+1),我有同样的问题…

创建应用程序最初与一个老版本的轨道,撞到最后(3.2.13),这打破了我的设计的东西..

所有需要的是在config/application.rb的顶部添加require "rails/all"

我有一个类似的问题,抱怨一个未定义的方法:'has_many'。 我花了一段时间摆脱ruby和rails版本和宝石之前,意识到这个问题… has_many之前的额外空间!

我从其他地方复制了旧的代码(印象笔记,使用各种奇怪的格式),并没有意识到空白的细节可以搞砸了这样的事情。 删除空格并重新手动修复问题。

(这不是原来的问题的答案,但我的搜索引导我在这里,并可能带领其他人在这里。)