2016-12-22 16 views
1

私はまだ2番目のフィードを作ろうとしていますが、現時点ではうまくいきません。Railsのparamsでキーの存在を確認する方法は?

私はこのエラーに苦しんでいました。誰かが私に説明するとかなりうまくいくと思います。

users_controller.rb:用

未定義のメソッド `+」:私はそれを見たとき、私にエラーを与えるものだ

@user = User.find(params[:id]) 
    @microposts_second = @user.microposts.paginate(page: params[:page] + 1) 
end 

show.html.erb

<% if @user.microposts.any? %> 
    <h3>Microposts (<%= @user.microposts.count %>)</h3> 
    <ol class="microposts"> 
    <%= render @microposts_second %> 
    </ol> 
    <% end %> 
</div> 

nil:NilClass

+3

'paramsは願っています[:ページ] + 1 'を - これはエラー行のようです。これは 'params [:page] .to_i + 1'でなければなりませんが、' params [:page] 'の値は何ですか?それは無用のように見えます! – dp7

+0

ああ私はよくエラーが少なくとも@ dp7のおかげで解決された参照してください。しかし、まだ同じフィードページを表示しているので、フィードの2ページ目が表示されない理由を理解する必要があります。 –

+0

クリックして2番目のフィードを表示するときに質問にログを追加できますか? – dp7

答えて

2

params[:page]に依存できないため、値が存在することを確認する必要があります。さらに、整数を追加しようとしているので、型が一致することを確認する必要もあります。 :pageの値がparamsに存在することを確実にするためにhas_key?

if params.has_key?(:page) 
    current_page_count = params[:page].to_i 
end 

だから、メソッドを使用することができます。

+0

ああうわーそれは今、おかげで多くの男を最終的に動作します! –

+0

@ N.Oraile答えがあなたを助けたら、それを受け入れることができます。 –

0

params[:page]を追加しようとするとエラーが発生します。 URLに渡されたページパラメータがない場合、このエラーが発生します。

def somedef 
    @user = User.find(params[:id]) 
    pageno = params[:page].present? ? params[:page].to_i + 1 : nil 
    @microposts_second = @user.microposts.paginate(page: pageno) 
end 
0

は、多くの場合、私はハッシュ「靴」が存在するかどうか私は知らないとき

params {"shoes" => {"number" => "11"}} 

の有無を確認する必要があるエラーをスキップするために、これを試してみてください(多分dinamically作成されたに!)。 params [:shoes] [:number]をparams [:shoes]がnilであるところで呼び出そうとすると、私は未定義の例外をトリガーします。

使用レスキュートリガーなしで直接params [:shoes] [:number]を確認できます。

if(params[:shoes][:number] rescue false) 
    # here you can safe reading params[:shoes][:number] 
    # managing exception if params[:shoes] (or [:shoes][:number]) is nil 
end 

私はこの便利

関連する問題