2010-09-08 4 views
4

Я только начинаю с Ruby и Rails, пробуя Devise with Rails 3. У меня есть цикл вокруг списка сообщений, каждый из которых связан с пользователь. Я только хочу отображать элементы управления редактирования для тех сообщений, которые связаны с текущим пользователем.Тестирование против «current_user» с помощью Devise in Rails 3

<% @posts.each do |post| %> 
    <%= link_to "show" %> 
    <% if current_user = post.user %> 
    <%= link_to "edit" %> 
    <% end %> 
<% end %> 

(выше упрощена, и из памяти, поэтому я уверен, что синтаксис не совсем верно - но вы получите суть.)

Если ни один пользователь не вошел в систему, посты показать, как и предполагалось, - есть ссылка Show, но нет ссылки Edit. Однако, если я вообще вошел в систему, отображаются все ссылки Edit, даже сообщения fir, созданные другим пользователем.

Я проверял в консоли, что User.find(1) != User.find(2), но по какой-то причине current_user = post.user оценивает истина независимо от того, кто в настоящее время вошли в систему. Является ли это делать с current_user будучи помощником, в отличие от «реальной» user объекта? Как я могу использовать current_user, чтобы получить доступ к текущему пользователю ACTUAL для сравнения?

Спасибо,

Dan

ответ

7

Вы назначая вместо тестирования - использование == - т.е.

<% if current_user == post.user %> 
+0

Я, наверное, надо было прочитать мою книгу Руби больше, прежде чем пропустить на Rails. Не уверен, почему я инстинктивно не использовал '==', я разработчик C# днем ​​... Спасибо! –