2016-05-24 8 views
0

私は2ページのタイムシート提出アプリケーションを作成しています。これまでのフォームは動作し、1秒間ロードアイコンが表示され、感謝のページに移動します。このエラーは、プロセスを再開しようとしたときに発生し、最初のページに戻ります。私は上記のエラーを取得し、それは以下のコードの6行目を指しています。Rubyエラー:未定義メソッド `[] 'for nil:NilClass

class WelcomeController < ApplicationController 
    def index 
    end 

    def show_data 
    @email = params[:timesheet][:email] 
    sleep(1.0) 
    end 
end 

第1ページのコードは次のとおりです。

<%= stylesheet_link_tag "style.css" %> 
<%= javascript_include_tag "code.js" %> 

<div class="wrapper"> 
    <h1>Submit Timesheet</h1> 
    <div class="loader"> 
    <div class="spinner"></div> 
    </div> 
    <%= form_for :timesheet, :action=>"show_data", :onsubmit => "return validationEvent();" do |f| %> 
    <p> 
     <%= f.text_field :email, placeholder: "Email:", onFocus: "this.placeholder=''", onBlur: "this.placeholder='Email:'", :id=>"email" %> 
     <%= f.label "Invalid Email", :id=>"invalid", :class=>"invalid" %> 
     </p> 

    <p> 
     <%= f.text_area :message, placeholder: "Message (optional):", onFocus: "this.placeholder=''", onBlur: "this.placeholder='Message (optional):'" %> 
    </p> 

    <p> 
     <%= f.label("What type of work is this for?") %> 
    </p> 

    <div class="container"> 
     <div class="option">Time working on visual effects for movie</div> 
     <div class="option">Time spent reviewing the work of a junior artist</div> 
    </div> 

    <p> 
     <%= f.button "Clear", type: :reset, :id=>"clear" %> 
     <%= f.submit "Next", :id=>"next", :onclick =>"return validationEvent();" %> 
    </p> 

    <%= debug params %> 
    <% end %> 
</div> 

と完了ページのコード。

<h1> Timesheet Submitted </h1> 
<%= form_for :timesheet, :action=>"root" do |f| %> 
    Thank you <%= @email %>! 
    <p> 
    <%= f.button "Start Over", :id=>"restart", :onsubmit=>"index" %> 
    </p> 
<%= debug params %> 
<% end %> 

私はオンラインで見てきましたが、私はどこに間違っているのか分かりません。どんな助けでも大変感謝します。ありがとう!

+0

と書くことができます。タイムシートモデルはありますか?そうでなければ、 'form_for:timesheet'または' form_for @ timesheet'は動作しません。モデルをお持ちの場合は、モデルコードを共有してください。モデルがない場合は、form_tagを使用して手動でparams配列を生成できます。 form_tagについては、http://apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tagを参照してください。 – Anand

+1

@Anandそれは真実ではありません。シンボルを使用してフォームを使用できます。 –

+0

あなたは 'show_data'アクションで何をparamsハッシュしますか? 'params [:timesheet]'は無しです。 –

答えて

0

最初のページに戻ると、空のパラメータがあります。エラーを修正するには、

def show_data 
    if params.has_key?(:timesheet) && params[:timesheet].has_key?(:email) 
     @email = params[:timesheet][:email] 
    end 
    sleep(1.0) 
end 
関連する問題