Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails NoMethodError:未定义的方法'create';_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails NoMethodError:未定义的方法'create';

Ruby on rails NoMethodError:未定义的方法'create';,ruby-on-rails,ruby,Ruby On Rails,Ruby,我开始学习ruby并开始喜欢它,但我有一个自己无法解决的问题 我无法使用已创建的模型来查找或创建数据库中的数据,从而导致错误NoMethodError:Stuff:Module的未定义方法“create” 模型类很简单: class Stuff < ActiveRecord::Base validates :name, presence: true end class-Stuff5.0” #使用Uglifier作为JavaScript资产的压缩器 gem'uglifier','>=1

我开始学习ruby并开始喜欢它,但我有一个自己无法解决的问题

我无法使用已创建的模型来查找或创建数据库中的数据,从而导致错误
NoMethodError:Stuff:Module的未定义方法“create”

模型类很简单:

class Stuff < ActiveRecord::Base
  validates :name, presence: true
end
class-Stuff
Gemfile

source 'https://rubygems.org'


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.4'
# Use mysql as the database for Active Record
gem 'mysql2', '0.3.18'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc

# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug'
end

group :development do
  # Access an IRB console on exception pages or by using <%= console %> in views
  gem 'web-console', '~> 2.0'

  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
end
源代码'https://rubygems.org'
#捆绑边缘Rails:gem'Rails',github'Rails/Rails'
gem“rails”、“4.2.4”
#使用mysql作为活动记录的数据库
宝石'mysql2','0.3.18'
#将SCS用于样式表
gem'sass-rails',“~>5.0”
#使用Uglifier作为JavaScript资产的压缩器
gem'uglifier','>=1.3.0'
#将CoffeeScript用于.coffee资产和视图
gem“咖啡轨”,“~>4.1.0”
#看https://github.com/rails/execjs#readme 获取更多受支持的运行时
#宝石“therubyracer”,平台::ruby
#使用jquery作为JavaScript库
gem'jqueryrails'
#Turbolinks使web应用程序中的以下链接更快。阅读更多:https://github.com/rails/turbolinks
gem“涡轮链接”
#轻松构建JSON API。阅读更多:https://github.com/rails/jbuilder
gem'jbuilder',“~>2.0”
#bundle exec rake doc:rails在doc/API下生成API。
gem'sdoc','~>0.4.0',组::doc
#使用ActiveModel具有\u安全\u密码
#gem'bcrypt',“~>3.1.7”
#使用Unicorn作为应用程序服务器
#宝石“独角兽”
#使用Capistrano进行部署
#gem“capistrano rails”,集团::开发
小组:开发,:测试
#在代码中的任意位置调用“byebug”以停止执行并获得调试器控制台
宝石“比伯”
结束
小组:发展怎么办
#在异常页面上或通过在视图中使用访问IRB控制台
gem“web控制台”,“~>2.0”
#Spring通过让应用程序在后台运行来加速开发。阅读更多:https://github.com/rails/spring
宝石“春天”
结束
迁移文件:

class Stuff < ActiveRecord::Migration
  def change
    create_table :stuffs do |t|
      t.string :name
    end
    add_index :stuffs, :id
  end
end
class-Stuff
控制器:

class StuffsController < ApplicationController
  before_action :get_stuffs, :only => [:index, :show]
  before_action :validate_params, :only => [:create]

  def get_stuffs
    @stuffs = []
  end

  def show

  end

  def index

  end

  def create
    Stuff.create(params[:name])
  end

  private

  def validate_params
    params.require(:name)
  end
end
class-StuffsController[:index,:show]
在执行以下操作之前:验证参数,:only=>[:create]
def获取_文件
@Stuff=[]
结束
def秀
结束
def索引
结束
def创建
创建(参数[:名称])
结束
私有的
def验证参数
参数require(:name)
结束
结束
这不仅适用于create方法,也适用于任何其他方法,如find、first或all

我从控制器调用任何方法时都会遇到此错误,但也会从(例如,
seed.rb
调用此错误

我相信这是一个愚蠢的新手问题,但我不知道如何解决这个问题


谢谢大家!

这似乎是Rails的自动加载功能造成的。一般来说,Rails不会在应用程序启动时加载所有类,因此当应用程序启动时,
Stuff
不存在。在控制台中尝试以下操作:

Object.constants.include? :Stuff #=> false
当Ruby在代码中达到一个常量时,它会启动一个称为常量查找的过程。它相当复杂,所以我现在跳过它。重要的是,如果Ruby找不到常数,Rails将使用它的
constant\u missing
magic,搜索
load\u路径
中与常数匹配的文件名,因此
Stuff
应该直接在
Stuff.rb
文件中定义在
load\u路径

默认情况下,
load\u路径
包括您的
app
文件夹,但不包括其子文件夹,因此它将仅直接在app文件夹中查找
stuff.rb

当一个常量驻留在另一个模块中时,情况略有不同。如果您试图加载常量
A::B
,它首先需要加载模块
A
,然后从文件
A/B.rb
中加载类
A::B
。为了避免我们用空模块创建虚拟文件,Rails将把
A
解析为一个新的空模块,如果它找到
A
文件夹,但找不到
A.rb
文件

这就是这里发生的事情。当您调用尚未定义的
Stuff
常量时,它正在您的应用程序文件夹中查找
Stuff.rb
文件。因为它没有找到它,但是有一个
stuff
文件夹,所以Rails生成了一个空白的模块stuff


一个可能的解决方法是,只需将
stuff.rb
文件从stuff文件夹中移出,所有操作都会正常进行。

此外,最好将创建迁移命名为
CreateStuff
,请查看

注意,错误消息是
Stuff:Module
,而不是
Stuff:Class
-除了您的类之外,您还有
Stuff
模块吗?我没有为该类创建任何模块,rails教程没有提到我必须,是吗?您何时收到错误?您能够在rails控制台中创建Stuff对象吗?如果无法在控制台中创建stuff对象,请发布stuff表的迁移文件内容。另外,发布StuffController。我从控制器方法、执行rake db:seed或从控制台调用Stuff.create获得错误。我用控制器和迁移文件更新了帖子。@frostering-你的应用程序中有一个名为stuff的文件夹吗?