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

时间:2014-06-19 23:20:36

标签: ruby-on-rails database controller

我正在构建一个数据库,并且我遇到了与list,show,new等对应的控制器问题。动作。这是我的控制器代码:

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

我尝试转到localhost:3000时遇到错误:技能/列表是:

ActiveRecord::RecordNotFound in SkillsController#show
Couldn't find Skill with 'id'=list

并且这行代码突出显示为问题区域:

        @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>

我想出了控制器问题,现在我只对上面的视图有问题。错误是:

 /app/views/skills/index.html.erb where line #16 raised:

undefined local variable or method `c' for #<#<Class:0x000000055b1620>:0x0000000413d338>

它指向的具体行是:

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

我认为c.id是我数据库的无效参数,但我不确定。我会继续努力解决它,并感谢任何知道任何事情的人。

1 个答案:

答案 0 :(得分:1)

您收到错误消息,因为您没有(或没有正确)设置list操作的路由。目前rails会将您错误地路由到show操作,以获取ID为“list”且明显不存在的元素。

list操作的rails默认名称是index,默认路由就是localhost:3000 /技能/如果你想走这条路,你不必改变除控制器中的方法名称以外的任何内容。

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

resources :skills do 
  get 'list'
end