У меня проблемы с моим первым проектом в ruby ​​on rails - PullRequest
0 голосов
/ 10 мая 2010

Вот мое индексное действие в контроллере books: http://pastebin.com/XdtGRQKV

Вот вид для действия, которое я только что упомянул: http://pastebin.com/nQFy400m

Вот результат без входа в систему: http://i.imgur.com/rQoiw.jpg

Вот результат, когда я вошел в систему с пользователем 'admin': http://i.imgur.com/E1CUr.jpg

Итак, проблема в том, что перед строкой 25 переменная 'user' кажется пустой (или не загруженной), а после строки 25 переменная 'user' имеет ожидаемые значения.

Я попытался инициализировать переменную в методе index контроллера books, но получил точно такие же результаты.

Заранее спасибо!

КСТАТИ пришлось сделать текстовые ссылки из-за ограничения stackoverflow.

Ответы [ 2 ]

3 голосов
/ 10 мая 2010

Это:

user = User.find_by_id(session[:user_id])

должно быть в контроллере, а не в поле зрения (MVC!), Например:

@user = User.find_by_id(session[:user_id])

Тогда, на ваш взгляд, как ответил @Voyta, используйте <%= @user.username %>. Код внутри <% %> оценивается, но не отображается, поэтому, если вы хотите поместить результат в HTML, вам нужно добавить =.

И все ваши if user и if user.admin == 1 будут выглядеть намного лучше так:

<% if user %>
  <td><%= link_to 'Show', book %></td>
  <% if user.admin == 1 %>
    <td><%= link_to 'Edit', edit_book_path(book) %></td>
    <td><%= link_to 'Delete', book, :confirm => 'Are you sure?', :method => :delete %></td>
  <% end
 end
%>

Если вы используете if в одну строку, как здесь:

<%
 if user
  if user.admin == 1
%>
<%= link_to 'New book', new_book_path %>
<%
  end
end
%>

Вы можете написать так же, как это:

<%= link_to 'New book', new_book_path if user && user.admin == 1 %>
2 голосов
/ 10 мая 2010

Вы не вывели user.username. Должно быть <%= user.username %>, а не <% user.username %>

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