在从PHP转移到摇滚乐之后,我不再擅长轨道了,但希望有一个陡峭的学习曲线。
我正在关注如何在rails中制作一个Twitter克隆的指南,并继续沿着这条路径使它越来越像Twitter。
所以我有一个'用户'页面/users/show.html.erb,它显示了用户的所有帖子。
现在,如果当前登录的用户与页面所有者相同,我正在尝试显示文本框,以便用户可以添加新条目。
我有一个非常简单的
<% if params[:id] == session[:user_id] %> put the text box here <% end %>
当然,这不起作用,但正好在它之上我输出了会话[:user_id]和参数[:id],打印输出完全相同。
如果我将==设置为!=,我会收到'把文本框放在这里'的消息。
关于我做错了什么的任何建议? 我知道这两个值匹配,正如我在网址和当前登录用户的输出中看到的那样。我也输出了
-<% session[:user_id] %>- -<% params[:id] %>-
这样我就可以看到参数两端没有间隙或空格或其他字符,而且看起来都很干净。
输出看起来像这样
-4c4483ae15a7900fcc000003- -4c4483ae15a7900fcc000003-
这是用户的mongodb objectId,左侧有破折号,表示没有空格或任何内容。
答案 0 :(得分:17)
你确定这两个项目都是简单的字符串吗?如果你跑步会发生什么,比如说
params[:id].to_s == session[:user_id].to_s
答案 1 :(得分:2)
可能就像jasonpgignac指出的那样。如果您进入IRB:
num = "7"
num2 = 7
num == num2 # => false
确保它们属于同一类型。放<%= num2 %>
实际上会触发.to_s方法...因此当你在.erb页面中输出它们时,两者看起来是相同的。
此外,您可能希望将该比较移动到控制器中。类似的东西:
@is_user_home = params[:id].to_s == session[:user_id].to_s
然后你可以加入你的观点:
<% if @is_user_home %>
code here
<% end %>
它使代码更容易阅读。
答案 2 :(得分:0)
如前所述,在大多数情况下,这类问题是由比较类型的不匹配引起的。只需向两个变量添加to_s
即可解决大多数情况。
Here检查很好的资源,以了解有关Ruby中使用的所有比较的更多信息。