рельсы, сравнивающие значения params [: id] и session [: user_id] не работают - PullRequest
11 голосов
/ 19 июля 2010

Я новичок в рельсах после перехода с PHP, и у меня нет конца разочарованию, но, надеюсь, есть крутая кривая обучения.

Я следовал руководству о том, как сделать клон твиттера в рельсах, и продолжал идти по этому пути, делая его все более и более похожим на твиттер.

Итак, у меня есть страница «пользователей» /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- 

- это идентификатор объекта mongodb пользователя с тире по обе стороны, чтобы показать, что здесь нет пробелов или чего-либо еще.

Ответы [ 3 ]

17 голосов
/ 19 июля 2010

Вы уверены, что оба элемента являются простыми строками?Что произойдет, если вы запустите, скажем

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

?

2 голосов
/ 19 июля 2010

Это может быть похоже на 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 %>

Это делает код немного легче для чтения.

0 голосов
/ 01 февраля 2017

Как уже говорилось, в большинстве случаев проблемы такого рода вызваны несовпадением сравниваемых типов.Просто добавление to_s к обеим переменным решает большинство случаев.

Здесь проверьте отличный источник, чтобы узнать больше обо всех видах сравнений, используемых в Ruby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...