【问题标题】:Controller syntax error and database issue控制器语法错误和数据库问题
【发布时间】:2014-06-19 23:20:35
【问题描述】:

我正在构建一个数据库,并且遇到了与列表、显示、新建等对应的控制器的问题。行动。这是我的控制器代码:

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:skills/list 时出现的错误是:

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 对我的数据库来说是一个无效参数,但我不确定。我会继续努力修复它并感谢任何知道任何事情的人。

【问题讨论】:

  • 是的,现在在上面发布。
  • 因此,您需要将此视图重命名为 show.rhtml 或遵循 @PeterSorowka 的解决方案。缺少模板是因为动作show 正在寻找show 模板,它不知道list.rhtml
  • 我明白了!谢谢,我会继续努力并修复它。
  • 我将 list.rhtml 更改为 show.rhtml,但仍然收到此错误::::Template is missing Missing template Skills/show, application/show with {: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 gem 表明您肯定在使用 Rails 3+。为什么你有rhtml 分机?尝试将该文件扩展名更改为.html.erb。这是从 Rails 2 提出的旧项目吗?

标签: ruby-on-rails database controller


【解决方案1】:

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

list 操作的 rails 默认名称是 index 并且默认路由只是 localhost:3000/skills/ 如果你想走这条路,你不需要改变任何东西,除了方法控制器中的名称。

如果你想使用路径 localhost:3000/skills/list 在你的控制器中调用方法list,你必须改变你的config/routes.rb文件来包含

resources :skills do 
  get 'list'
end

【讨论】:

  • 谢谢它的工作,我收到了 index.html.erb 的新错误,但我会在上面的 index.html.erb 下方添加错误。
猜你喜欢
  • 2017-02-25
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
相关资源
最近更新 更多