控制器'新'方法错误

时间:2014-06-19 05:15:17

标签: ruby-on-rails controller

我关注a tutorial 我的new行动收到了错误消息。我使用本教程作为指导,我的数据库不同。这是我的代码:

def new
  @skill = Skill.new
  @skills = Skill.find(:all)
end

这是我的错误消息:

uninitialized constant SkillsController::Skill

@skill = Skill.new是突出显示的行,所以我的错误应该在某处。谢谢你,我将继续努力用研究的力量解决它!

^^^^^^^^^^^^^^^解决^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^

现在我收到一个新错误,似乎我的数据库并不适合技能ID。我想去localhost:3000 /技能/列表,这是我的代码:

    class SkillsController < ApplicationController
  def list
    @skills = Skill.find(:all)
   end

   def show
    @skills = Skill.find(params[:id])
   end

我的错误是:

无法找到没有ID的技能

它突出显示:

@skills = Skill.find(params[:id])

作为问题领域。感谢所有知道如何解决这个问题的人,如果我应该重新发布一个不同的问题让我知道,我会这样做。再次感谢网络开发社区的huzzah!

2 个答案:

答案 0 :(得分:1)

我认为你搞乱了rails惯例。 Rails希望 Controller类名复数,这样SkillsController将成为技能表的控制器类。然后,Rails将在/ app / controllers目录中名为skills_controller.rb的文件中查找类定义。有关命名约定的更多信息,请参阅here

此外,由于您的错误显示uninitialized constant SkillsController::Skill。我认为您没有使用Skill.rb模型设置技能表,请注意您的表名称将为复数,并且您的模型名称将为单数

答案 1 :(得分:1)

<强>语法

首先,Rails 4 syntax应为:

def new
    @skills = Skill.all
end

-

错误

关于您的错误,如评论中所述,您确实需要确保您的应用程序中有Skill类。

你必须记住Rails基本上只是一系列的课程和模块,这意味着如果你试图调用“模型”,你实际上是在调用需要加载的Ruby Class(作为常量)。

问题是你的应用程序没有加载Skill类(模型)。这很可能是因为你的app/models目录中没有它:

#app/models/skill.rb
Class Skill < ActiveRecord::Base
   ... 
end

但是,我担心的是你的错误是如何将这个模型包装在另一个类中的 - SkillsController。如果你有namespaced控制器,通常就是这种情况;但无论哪种方式,您都应该创建model,重新启动服务器&amp;再次测试