如何在Rails中检查params中某个键是否存在?

3

我还在努力让我的第二个Feed工作,但目前还不太行。

我遇到了这个错误,想知道我做错了什么,如果有人能解释一下那就太好了。

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>

当我查看时,它给我提供了以下错误信息:

未定义方法 `+' for nil:NilClass


3
这似乎是错误的代码行:params[:page] + 1。应该改为params[:page].to_i + 1,但params[:page]的值是多少呢?它看起来像是nil - dp7
哦,我懂了,好吧,至少错误已经解决了,非常感谢@dp7。但是仍然显示相同的Feed页面,所以我需要找出为什么不显示Feed的第二页。 - N.Oraile
当您点击查看第二个反馈时,您能否将日志添加到问题中? - dp7
3个回答

6

您不能仅依赖于params[:page],您需要确保该值存在。此外,由于您尝试添加一个整数,因此您还需要确保类型匹配。

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

所以,您可以使用方法:has_key?来确保:page的值存在于params中。

@N.Oraile 如果这个答案对您有帮助,您可以接受它。 - Arslan Ali

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"}}

当我不知道哈希表"shoes"是否存在(可能是动态创建的!)。 如果我尝试调用params[:shoes][:number],其中params[:shoes]为nil,我将触发未定义的异常。

使用rescue,我可以直接检查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

希望这有帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接