2016-06-12 21 views
0

フォームを使用して質問を送信すると、すべての質問が同じページに表示されます。検証が(最小25文字)を通過するときにそれが正常に動作しますが、それは通らないとき、私はこのエラーを取得する:データベースに保存するときにメソッドエラーが発生しない

NoMethodError in Questions#create 
Showing /home/ubuntu/workspace/app/views/static_pages/home.html.erb where line #20 raised: 

undefined method `each' for nil:NilClass 
Extracted source (around line #20): 

<div class="row"> 
    <div class="col-md-12"> 
     <% @questions.each do |question| %> <--- this is line 20 
     <p> <%= question.content %></p> 
     <% end %> 
     </div> 

私は本当に何が起こっているのか分かりません。何か案は?

アプリ/コントローラ/ static_pages_controller:

class StaticPagesController < ApplicationController 
    def home 
    @questions= Question.all 
    end 

    def help 
    end 
end 

ビュー/ static_pages /ホーム

<div class="row"> 
    <div class="col-md-12"> 
     <% @questions.each do |question| %> 
     <p> <%= question.content %></p> 
     <% end %> 
     </div> 

</div> 

アプリ/コントローラ/ questions_controller:

class QuestionsController < ApplicationController 
#before_action :logged_in_user, only: [:create] 

    def create 
    @question = Question.new(question_params) #this might not work 
    if @question.save 
    flash[:success] = "Question added" 
    redirect_to root_path 
    else 
     flash[:danger] = "Add question failed. Try making the question longer." 
     render 'static_pages/home' 
    end 

    end 


    private 

    def question_params 
    params.require(:question).permit(:content) 
    end 

end 

モデル/ question.rb

class Question < ActiveRecord::Base 
    validates :content, presence: true, length: { minimum: 25} 
end 
+0

質問テーブルにはレコードがありますか? – Pavan

答えて

0

It works fine when the validation passes (minimum 25 characters) but when it doesn't pass, I get this error undefined method `each' for nil:NilClass

検証がを失敗したときに、あなたがそのような場合には、それを設定していないので、Railsのできないが、@questionsを見つけることからです。それを追加すると、あなたは行くはずです。

def create 
    @question = Question.new(question_params) 
    if @question.save 
    flash[:success] = "Question added" 
    redirect_to root_path 
    else 
    flash[:danger] = "Add question failed. Try making the question longer." 
    @questions = Question.all #All you need is to add this line 
    render 'static_pages/home' 
    end 
end 
+0

@nachimeここにキーは 'render 'static_pages/home''です。 'render'はページをロードするだけです。それはアクションには向かないので、 'home'メソッドの' @ questions'メソッドはnilとして扱われます。 – Pavan