Ruby on rails 控制器语法错误和数据库问题

Ruby on rails 控制器语法错误和数据库问题,ruby-on-rails,database,controller,Ruby On Rails,Database,Controller,我正在建立一个数据库,发现与列表、显示、新建等对应的控制器出现问题。行动。这是我的控制器代码: class SkillsController < ApplicationController def list @skills = Skill.all end def show @skills = Skill.find(params[:id]) end def new @skills = Skill.all end def

我正在建立一个数据库,发现与列表、显示、新建等对应的控制器出现问题。行动。这是我的控制器代码:

class SkillsController < ApplicationController
  def list
    @skills = Skill.all
   end

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

   def new
    @skills = Skill.all

   end

   def create
        @skills = Skill.new(params[:skill])
      if @skills.save
            redirect_to :action => 'list'
      else
            @skills = Skill.find(:all)
            render :action => 'new'
      end
   end

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

   def update
       @skills = Skill.find(params[:id])
      if @skills.update_attributes(params[:skill])
         redirect_to :action => 'show', :id => @skills
      else
         @skills = Skill.find(:all)
         render :action => 'edit'
      end
   end

   def delete
    Skill.find(params[:id]).destroy
    redirect_to :action => 'list'
   end

     def show_skills
      @skills = Skill.find(params[:id])
   end
end
这一行代码突出显示为问题区域:

        @skills = Skill.find(params[:id])
我猜我的技能没有正确地构建为具有ID,但我不确定,并且我读到了在没有声明表将具有ID的情况下自动生成的。感谢所有了解我的问题的人,我希望这是一个简单的语法错误。干杯,再次感谢

我尝试将其更改为Skill.all,但现在我遇到了一个缺少模板的错误。它没有在我的视图/技能目录中查找模板,我不知道为什么。如果有人对此有任何建议,我们将不胜感激。再次感谢,祝你好运! ^^^^^^^^^^^^^^^^^^^解决^^^^^^^^^^^^^^^^^^

这是list.rhtml视图:

<% if @skills.blank? %>
  <p>There are not any skills currently saved in the system.</p>
<% else %>
  <p>These are the current skills saved in our system</p>
  <ul id="skills">
    <% @skills.each do |c| %>
      <li><%= link_to c.title, {:action => 'show', :id => c.id} -%></li>
    <% end %>
  </ul>
<% end %>

<p><%= link_to "Add new Skill", {:action => 'new' }%></p>    

<li>
      <%= link_to c.title, {:action => 'show', :id => c.id} -%>
  <b> <%= link_to 'Edit', {:action => 'edit', :id => c.id} %></b>
  <b> <%= link_to "Delete", {:action => 'delete', :id => c.id},
                             :confirm => "Are you sure you want to delete this skill??" %></b>
</li>

系统中当前未保存任何技能

这些是我们系统中保存的当前技能

  • 'show',:id=>c.id}-%>
“新建”}%>

  • 'show',:id=>c.id}-%> '编辑',:id=>c.id}%> 'delete',:id=>c.id}, :confirm=>“您确定要删除此技能吗?”%>
  • 我解决了控制器的问题,现在只对上面的视图有问题。错误是:

     /app/views/skills/index.html.erb where line #16 raised:
    
    undefined local variable or method `c' for #<#<Class:0x000000055b1620>:0x0000000413d338>
    
    /app/views/skills/index.html.erb,其中第16行出现:
    未定义的局部变量或方法“c”#
    
    它所指的具体路线是:

     <%= link_to c.title, {:action => 'show', :id => c.id} -%>
    
    'show',:id=>c.id}-%
    

    我认为c.id对于我的数据库是无效的参数,但我不确定。我将继续尝试修复它,并感谢任何知道任何事情的人。

    您收到错误消息,因为您没有(或没有正确)为
    列表
    操作设置路由。当前,rails错误地将您路由到ID为“list”的元素的
    show
    操作,该元素显然不存在

    列表
    操作的rails默认名称为
    索引
    ,默认路径为localhost:3000/skills/如果您想走这条路,除了控制器中的方法名称之外,您不必更改任何内容

    如果要使用路径localhost:3000/skills/list调用控制器中的方法
    list
    ,则必须更改
    config/routes.rb
    文件以包含

    resources :skills do 
      get 'list'
    end
    

    是的,现在在上面发布。因此,您需要将此视图重命名为
    show.rhtml
    ,或者遵循@PeterSorowka的解决方案。缺少模板是因为操作
    show
    正在查找
    show
    模板,它不知道
    list.rhtml
    。我明白了!谢谢,我将继续并尝试修复它。我将list.rhtml更改为show.rhtml,但仍然会遇到以下错误:::模板缺少模板技能/show,应用程序/show,带有{:locale=>[:en],:formats=>[:html],:variants=>[],:handlers=>[:erb,:builder,:raw,:ruby,:jbuilder,:coffee]}。搜索:“*”C:/HandCoOp/project/HandCoOp/app/views“*”C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/devise-3.2.4/app/views“您的ruby和rails gems表明您肯定在使用rails 3+。为什么有
    rhtml
    扩展名?尝试将该文件扩展名更改为
    .html.erb
    。这是Rails 2的老项目吗?谢谢,它成功了,我得到了index.html.erb的一个新错误,但是我会在上面的index.html.erb下面添加错误。
    resources :skills do 
      get 'list'
    end