Ruby on rails 比较参数[:id]和会话[:user_id]的值的rails不工作
我刚从PHP转学到rails,经历了无数挫折,但希望有一个陡峭的学习曲线 我一直在遵循一个关于如何在rails中复制twitter的指南,并继续沿着这条道路前进,使它越来越像twitter 因此,我有一个“users”页面/users/show.html.erb,其中显示了一个用户的所有帖子 现在,如果当前登录的用户与页面所有者相同,我将尝试显示文本框,以便用户可以添加新条目 我得到了一个非常简单的答案 <% if params[:id] == session[:user_id] %> put the text box here <% end %> 把文本框放在这里 当然,这不起作用,但就在它上面,我输出了会话[:user_id]和参数[:id],并且打印输出完全相同 如果我将==设置为!=,我收到了“把文本框放在这里”的信息 关于我做错了什么有什么建议吗? 我知道这两个值匹配,正如我在url和当前登录用户的输出中所看到的。我也有输出 -<% session[:user_id] %>- -<% params[:id] %>- -- -- 所以我可以看到,参数的两端都没有空格或其他字符,而且看起来很干净 输出如下所示 -4c4483ae15a7900fcc000003- -4c4483ae15a7900fcc000003- -4c4483ae15a7900fcc000003- -4c4483ae15a7900fcc000003-Ruby on rails 比较参数[:id]和会话[:user_id]的值的rails不工作,ruby-on-rails,string-comparison,Ruby On Rails,String Comparison,我刚从PHP转学到rails,经历了无数挫折,但希望有一个陡峭的学习曲线 我一直在遵循一个关于如何在rails中复制twitter的指南,并继续沿着这条道路前进,使它越来越像twitter 因此,我有一个“users”页面/users/show.html.erb,其中显示了一个用户的所有帖子 现在,如果当前登录的用户与页面所有者相同,我将尝试显示文本框,以便用户可以添加新条目 我得到了一个非常简单的答案 <% if params[:id] == session[:user_id] %>
哪一个是用户的mongodb对象ID,两边都有破折号,表示没有空格或任何东西。您确定这两个项目都是简单字符串吗?比如说,如果你跑了会发生什么
params[:id].to_s == session[:user_id].to_s
这可能就像贾森普吉纳克指出的那样。如果您进入IRB:
num = "7"
num2 = 7
num == num2 # => false
确保它们都是同一类型的。放置
实际上会触发.to\s方法。。。因此,当您在.erb页面中输出它们时,它们看起来是相等的
此外,您可能希望将该比较移动到控制器中。比如:
@is_user_home = params[:id].to_s == session[:user_id].to_s
然后,您可以在视图中输入:
<% if @is_user_home %>
code here
<% end %>
代码在这里
它使代码更易于阅读 如前所述,在大多数情况下,此类问题是由比较类型的不匹配引起的。只需将
添加到两个变量中即可解决大多数情况
查看伟大的源代码,了解更多关于Ruby中使用的各种比较。这是最有可能的。您可以尝试打印出参数[:id]。class
和会话[:user_id]。class
以及查看类型。调用。在打印前检查它们的真实值,而不仅仅是字符串值。