2014-11-25 5 views
0

저는 Ruby on Rails 가이드에 따라 Ruby on Rails의 절대적인 기초를 배우려고합니다. "NilClass 정의되지 않은 메서드 전무는"보기의 인스턴스 변수

app/controllers/articles_controller

class ArticlesController < ApplicationController 

    def new 
    end 

    def create 
    @article = Article.new(article_params) 
    @article.save 
    redirect_to @article 
    end 

    private 
    def article_params 
     params.require(:article).permit(:title, :text) 
    end 

    def show 
    @article = Article.find(params[:id]) 
    end 

    def test 
    @testing = [0, 1, 2, 3] 
    end 

end 



app/views/articles/new.html.haml 

= form_for :article, :url => articles_path do |f| 
    %p 
    = f.label :title 
    %br/ 
    = f.text_field :title 
    %p 
    = f.label :text 
    %br/ 
    = f.text_field :title 
    %p 
    = f.submit 



app/views/articles/show.html.haml 

%p 
    Title: 
    %br/ 
    = @article.title 
%p 
    Text: 
    %br/ 
    = @article.text 


app/views/articles/test.html.haml 

= @testing[0] 

을 모두 테스트하고 말한다 뷰를 보여 그러나, 나는 뷰 컨트롤러에서 초기화 변수를 표시하려고하는 데 문제가 있어요 이것은 쇼보기에서 나타나는 오류입니다.

NoMethodError in ArticlesController#show 
undefined method `title' for nil:NilClass 

Title: 
%br/ 
= @article.title 
%p 
Text: 
%br/ 

도움이 될만한 어떤 도움이 될 것입니다. 내가 뭘 놓치고 있는지 모르겠다. 감사합니다.

+0

'@ 기사'에 대해 답변했습니다. '@ testing'은 괜찮아 보입니다. 당신이 얻고있는 정확한 오류와 경로를 붙여 넣을 수 있습니까? – Anand

답변

2

컨트롤러에서 @article을 사용하고보기에서 @article을 사용하고 있습니다. 보기에서 @articles를 @article으로 변경하십시오.

또한 개인 메서드를 클래스의 맨 아래로 옮깁니다. 이제 show 및 test 메서드가 컨트롤러에서 비공개가됩니다.

class ArticlesController < ApplicationController 

    def new 
    end 

    def create 
    @article = Article.new(article_params) 
    @article.save 
    redirect_to @article 
    end 

    def show 
    @article = Article.find(params[:id]) 
    end 

    def test 
    @testing = [0, 1, 2, 3] 
    end 

    private 
    def article_params 
     params.require(:article).permit(:title, :text) 
    end 
end 
+0

당신 말이 맞아요. 그러나 나는 그것을 해결했고 여전히 작동하지 않습니다. – FranGoitia

+0

작동하지 않는 기능은 무엇입니까? 어떤 오류가 발생합니까? 전체 오류 메시지를 붙여 넣습니다. – Anand

+0

대단히 감사합니다! 문제는 사적인 방법으로 – FranGoitia