请尝试理解我的问题:
当我关闭webrick服务器并再次重启时,然后在我的索引视图文件中启动服务器后有一些记录如果我点击三个选项中的任何一个(显示,编辑,删除)它给我错误“未定义的方法id' for nil:NilClass" and for "show" option "undefined method
名称为'nil:NilC“
但如果我添加新的记录,那么每件事情都很好,我不知道是什么错误
这是删除文件
<%= link_to("<< Back to List", {:action => 'index'}, :class => 'back-link') %>
<div>
<h2>Delete vendor</h2>
<%= form_for(:vendor, url: {action:'destroy', id: @vendor.id}) do |f| %>
<p>Are you sure you want to permanently delete this vendor?</p>
<p><%= @vendor.name %></p>
<div>
<%= submit_tag("Delete vendor") %>
</div>
<% end %>
</div>
这是控制器
class VendorController < ApplicationController
def index
@vendors=Vendor.all
end
def new
#initiate new vendor which hits back to create
@vendor=Vendor.new
end
def create
@vendor=Vendor.new(vendor_params)
if@vendor.save
flash[:notice]="vendor ceated"
redirect_to(action: 'index')
else
flash[:notice]="there is error"
render('new')
end
def show
@vendor=Vendor.find(params[:id])
end
def edit
@vendor=Vendor.find(params[:id])
end
def update
@vendor=Vendor.find(params[:id])
if @vendor.update_attributes(vendor_params)
flash[:notice]='record updated'
redirect_to(action:'index')
else
flash[:notice]='there is some error'
render('edit')
end
end
def delete
@vendor=Vendor.find(params[:id])
end
def destroy
@vendor=Vendor.find(params[:id]).destroy
if @vendor.destroy
redirect_to(action: 'index')
else
render('delete')
end
end
end
private
def vendor_params
params.require(:vendor).permit(:name ,:image_url)
end
end
这是编辑
<%= link_to("<< Back to List", {:action => 'index'}) %>
<div>
<h2>update Vendor</h2>
<%= form_for(:vendor, :url => {:action => 'update', id: @vendor.id }) do |f| %>
<%= render(partial:"form" , locals: {f: f}) %>
<div class="form-buttons">
<%= submit_tag("Update vendor") %>
</div>
<% end %>
</div>
这是节目
<%= link_to("<<BAck to main",{action:"index"}) %>
<div>
<h1>showing <%=@vendor.name %></h1>
<p><%=@vendor.image_url %></p>
</div>
答案 0 :(得分:0)
很高兴看到你解决了这个问题。
-
为了未来访问者的利益,错误是由您的控制器名称是单数而非复数引起的。
所有控制器都应以复数命名; 单数中的所有模型:
#app/models/vendor.rb
class Vendor < ActiveRecord::Base
end
#app/controllers/vendors_controller.rb
class VendorsController < ApplicationController
end
作为补充建议,使用@vendor
变量可以大大整理您的表单:
#app/views/vendors/edit.html.erb
<%= form_for @vendor do |f| %>
这将自动填充路径和方法,具体取决于您传递的对象的构造。