Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 比较参数[:id]和会话[:user_id]的值的rails不工作_Ruby On Rails_String Comparison - Fatal编程技术网

Ruby on rails 比较参数[:id]和会话[:user_id]的值的rails不工作

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] %>

我刚从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-
哪一个是用户的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
以及查看类型。调用
。在打印前检查它们的真实值,而不仅仅是字符串值。