Ruby on rails 4 RubyonRails show.html.erb未定义的方法'naam';零级:零级

Ruby on rails 4 RubyonRails show.html.erb未定义的方法'naam';零级:零级,ruby-on-rails-4,Ruby On Rails 4,我是RubyonRails新手。我创建了一个用于学习的基本应用程序 创建记录时,我重定向到ShowAction并获得一个错误:nil:NilClass的未定义方法'naam' 我做错了什么 耙路径 Prefix Verb URI Pattern Controller#Action welcome_index GET /welcome/index(.:format) welcome#index relaties GET

我是RubyonRails新手。我创建了一个用于学习的基本应用程序

创建记录时,我重定向到ShowAction并获得一个错误:nil:NilClass的未定义方法'naam'

我做错了什么

耙路径

     Prefix Verb   URI Pattern                  Controller#Action
welcome_index GET    /welcome/index(.:format)     welcome#index
     relaties GET    /relaties(.:format)          relaties#index
              POST   /relaties(.:format)          relaties#create
   new_relaty GET    /relaties/new(.:format)      relaties#new
  edit_relaty GET    /relaties/:id/edit(.:format) relaties#edit
       relaty GET    /relaties/:id(.:format)      relaties#show
              PATCH  /relaties/:id(.:format)      relaties#update
              PUT    /relaties/:id(.:format)      relaties#update
              DELETE /relaties/:id(.:format)      relaties#destroy
         root GET    /                            welcome#index
relaties\u controller.rb

class RelatiesController < ApplicationController

def new
    @relatie = Relatie.new
end

def create
    @relatie = Relatie.new(relatie_params)
    @relatie.save
    redirect_to @relatie
end

    private
      def relatie_params
        params.require(:relatie).permit(:id, :naam, :straatnaam, :huisnummer, :postcode, :plaats, :omschrijving)    
      end   

    def show
        @relatie = Relatie.find(params[:id])
    end 
 end
  Rails.application.routes.draw do
  get 'welcome/index'
  resources :relaties   
  root 'welcome#index'
    <p>
  <strong>Naam:</strong>
  <%= @relatie.naam %>
</p>

<p>
  <strong>Straatnaam:</strong>
  <%= @relatie.straatnaam %>
</p>

<p>
  <strong>Huisnummer:</strong>
  <%= @relatie.huisnummer %>
</p>

<p>
  <strong>Postcode:</strong>
  <%= @relatie.postcode %>
</p>

<p>
  <strong>Plaats:</strong>
  <%= @relatie.plaats %>
</p>

<p>
  <strong>Omschrijving:</strong>
  <%= @relatie.omschrijving %>
</p>
show.html.erb

class RelatiesController < ApplicationController

def new
    @relatie = Relatie.new
end

def create
    @relatie = Relatie.new(relatie_params)
    @relatie.save
    redirect_to @relatie
end

    private
      def relatie_params
        params.require(:relatie).permit(:id, :naam, :straatnaam, :huisnummer, :postcode, :plaats, :omschrijving)    
      end   

    def show
        @relatie = Relatie.find(params[:id])
    end 
 end
  Rails.application.routes.draw do
  get 'welcome/index'
  resources :relaties   
  root 'welcome#index'
    <p>
  <strong>Naam:</strong>
  <%= @relatie.naam %>
</p>

<p>
  <strong>Straatnaam:</strong>
  <%= @relatie.straatnaam %>
</p>

<p>
  <strong>Huisnummer:</strong>
  <%= @relatie.huisnummer %>
</p>

<p>
  <strong>Postcode:</strong>
  <%= @relatie.postcode %>
</p>

<p>
  <strong>Plaats:</strong>
  <%= @relatie.plaats %>
</p>

<p>
  <strong>Omschrijving:</strong>
  <%= @relatie.omschrijving %>
</p>

Naam:

斯特拉特纳姆:

huisnmmer:

邮政编码:

Plaats:

Omschrijving:


查看您提供的错误,它表明对于
nil:NilClass
没有
naam
方法。这意味着您正在调用给定对象不存在的方法(nil)。查看您的代码,这意味着
@relatie
show
中未正确设置。也就是说,
Relaties.find(params[:id])
正在返回
nil

这很可能是
@relatie.save
的一个错误,该错误正在失败,导致您的
重定向到@relatie
以重定向到
nil
。查看您的
create
rake routes
是否确定不应该使用
Relaties.new
而不是
Relaties.new


正如@redzagoglin所提到的,错误的来源是您的
show
是在
private
标记下定义的,这意味着
show
是一个私有方法,调用无法访问。因此,未设置
@relatie
。只需将其移到标记上方即可解决您的问题。

我不确定您遇到了什么,但当我将Relaties.new更改为Relaties.new时,在取消创建操作中,我在提交表单时会出现错误。您的
显示
操作必须在
专用
上方定义,而不是在下定义。