没有方法错误导轨

时间:2015-10-29 06:47:52

标签: ruby-on-rails

请尝试理解我的问题:

当我关闭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>

1 个答案:

答案 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| %>

这将自动填充路径和方法,具体取决于您传递的对象的构造。