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