我在轨道上的红宝石中的第一个项目遇到了麻烦

时间:2010-05-10 13:03:57

标签: ruby-on-rails ruby view

这是我在图书控制器中的索引操作: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'具有预期的值。

我已尝试在books控制器的index方法中初始化变量,但得到完全相同的结果。

提前致谢!

由于stackoverflow限制,BTW不得不制作链接文本。

2 个答案:

答案 0 :(得分:3)

此:

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

应该在控制器中,而不是在视图中(MVC!),如下所示:

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

然后在您看来,当@Voyta回答时,请使用<%= @user.username %><% %>内的代码已经过评估,但未呈现,因此如果您想将结果放入html,则需要添加=

所有你的if userif 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 %>

答案 1 :(得分:2)

您没有输出user.username。它应该是<%= user.username %>,而不是<% user.username %>