11

从 PHP 迁移后,我是 Rails 的新手,并且没有尽头的挫折感,但希望有一个陡峭的学习曲线。

我正在关注如何在 Rails 中制作 twitter 克隆的指南,并继续沿着这条路径前进,使其越来越喜欢 twitter。

所以我有一个“用户”页面 /users/show.html.erb 显示来自用户的所有帖子。

现在,如果当前登录的用户与页面所有者相同,我正在尝试显示文本框,以便用户可以添加新条目。

我有一个非常简单的东西

<% if params[:id] == session[:user_id] %>
    把文本框放在这里
<% 结束 %>

当然,这是行不通的,但在它上面我已经输出了 session[:user_id] 和 params[:id],并且打印输出完全一样。

如果我将 == 设置为 !=,我会收到“将文本框放在此处”的消息。

关于我做错了什么的任何建议?我知道这两个值匹配,正如我在 url 和当前登录用户的输出中看到的那样。我也输出了

-<% 会话[:user_id] %>-
-<% 参数[:id] %>-

这样我就可以看到参数的两端没有间隙或空格或其他字符,而且看起来都很干净。

输出看起来像这样

-4c4483ae15a7900fcc000003-
-4c4483ae15a7900fcc000003-

这是用户的 mongodb objectId,两边都有破折号,表示没有空格或任何东西。

4

3 回答 3

19

你确定这两个项目都是简单的字符串吗?如果你跑步会发生什么,说

params[:id].to_s == session[:user_id].to_s

?

于 2010-07-19T17:31:25.340 回答
2

这可能就像 jasonpgignac 指出的那样。如果您进入 IRB:

num = "7"
num2 = 7
num == num2 # => false

确保它们都是同一类型。Putting<%= num2 %>实际上会触发 .to_s 方法......因此,当您在 .erb 页面中输出它们时,为什么两者看起来相等。

此外,您可能希望将该比较移动到控制器中。就像是:

@is_user_home = params[:id].to_s == session[:user_id].to_s

然后你可以把你的观点:

<% if @is_user_home %>
    code here
<% end %>

它使代码更易于阅读。

于 2010-07-19T17:38:32.623 回答
0

如前所述,在大多数情况下,此类问题是由比较类型不匹配引起的。只需添加to_s两个变量即可解决大多数情况。

在这里查看大量资源以了解更多关于 Ruby 中使用的各种比较的信息。

于 2017-02-01T18:19:56.757 回答