2011-12-25 6 views
0

아래의 새 게시물보기를 호출 할 때 NilClass의 경우 정의되지 않은 메서드'model_name ': 클래스이 나타납니다. 나는 이것에 대해 많은 연구를했으며, 인스턴스 변수 @posts가 컨트롤러에 정의되어 있지 않을 때 주로 발생하는 것처럼 보입니다. 또한 routes 파일에 "resources : posts"를 포함 시켰습니다.호출 할 때 정의되지 않은 메서드`model_name '이 표시됩니다.

컨트롤러에서 이것을 선언했습니다. Current_user는 현재 로그인 한 사용자의 @user입니다. user_id가 현재 사용자로 채워지는 새 레코드를 만들려고합니다.

class PostsController < ApplicationController 

    def create 
    @post = current_user.posts.build(params[:post]) 
    if @post.save 
     flash[:success] = "Post created!" 
     redirect_to root_path 
    else 
     render 'pages/home' 
    end 
    end 
end 

new.html.erb :

<h1>Create Post</h1> 

    <%=form_for(@post) do |f|%> 
     <div class="field"> 
     <%=f.label :title %><br /> 
     <%=f.text_field :title%> 
     </div> 
     <div class="field"> 
     <%=f.label :body %><br /> 
     <%=f.text_field :body%> 
     </div> 
     <div class="field"> 
     <%=f.label :quantity %><br /> 
     <%=f.text_field :quantity%> 
     </div> 
     <div class ="actions"> 
     <%= f.submit "Post" %> 
     </div> 
    <%end%> 

답변

3

이 new.html.erb에 @post을 사용하려면, 당신은 컨트롤러의 new 방법을 설정해야합니다. 일반적으로 다음과 같이 보입니다.

def new 
    @post = Post.new 
end 
+0

"def create"메소드를 "def new"로 업데이트했습니다. 화면이 URL 표시 줄의 "새"경로와 함께 깜박이며 양식에 아무 것도 입력하지 않고 즉시 리디렉션됩니다. 그러나 게시물 테이블의 새 행이 만들어집니다. – kyle

+0

** 물론! ** 당신은 어떻게 생각 했습니까? 다시'create'로 이름을 바꾸고 내 게시물에'new'도 추가하십시오. –

+0

나는이 레일즈 북을 추천한다. http://pragprog.com/book/rails4/agile-web-development-with-rails –

관련 문제