Подтвердить что ты не робот

Рельсы, сравнивающие значения параметров [: id] и сеанса [: user_id], не работают

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

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

Итак, у меня есть страница "users" /users/show.html.erb, которая показывает все сообщения от пользователя.

Теперь, если текущий зарегистрированный пользователь совпадает с владельцем страницы, я пытаюсь показать текстовое поле, чтобы пользователь мог добавить новую запись.

У меня есть то, что должно быть очень простым

<% if params[:id] == session[:user_id] %>
    put the text box here
<% end %>

конечно, это не работает, но прямо над ним я выводил как сеанс [: user_id], так и params [: id], а распечатка точно такая же.

Если я устанавливаю value == to! =, я получаю сообщение "Поместите текстовое поле здесь".

какие-либо предложения относительно того, что я делаю неправильно? Я знаю, что эти два значения совпадают, как я вижу в URL-адресе и выходе текущего пользователя. Я также выводил

-<% session[:user_id] %>-
-<% params[:id] %>-

чтобы я мог видеть, что на обоих концах параметров нет пробелов или пробелов или других символов, и все выглядит чисто.

Результат выглядит следующим образом

-4c4483ae15a7900fcc000003-
-4c4483ae15a7900fcc000003- 

который является объектом mongodbId пользователя с тире с обеих сторон, чтобы показать, что нет пробелов или чего-то еще.

4b9b3361

Ответ 1

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

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

?

Ответ 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 %>

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

Ответ 3

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

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