Ruby on rails 我在RubyonRails的第一个项目中遇到了问题

Ruby on rails 我在RubyonRails的第一个项目中遇到了问题,ruby-on-rails,ruby,view,Ruby On Rails,Ruby,View,以下是我在books controller中的索引操作: 以下是我刚才提到的行动的观点: 以下是未登录的结果: 以下是我使用用户“admin”登录时的结果: 因此问题在于,在视图中,在第25行之前,“user”变量似乎为空(或未加载),而在第25行之后,变量“user”具有预期值 我尝试在books控制器的index方法中初始化一个变量,但得到了完全相同的结果 提前谢谢 顺便说一句,由于堆栈溢出限制,我们不得不将链接设置为文本。您没有输出user.username。它应该是,而不是您没有输出us

以下是我在books controller中的索引操作:

以下是我刚才提到的行动的观点:

以下是未登录的结果:

以下是我使用用户“admin”登录时的结果:

因此问题在于,在视图中,在第25行之前,“user”变量似乎为空(或未加载),而在第25行之后,变量“user”具有预期值

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

提前谢谢


顺便说一句,由于堆栈溢出限制,我们不得不将链接设置为文本。

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

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

这个:

user = User.find_by_id(session[:user_id])
应该在控制器中,而不是在视图中(MVC!),如下所示:

@user = User.find_by_id(session[:user_id])
<%= link_to 'New book', new_book_path if user && user.admin == 1 %>
然后在您看来,正如@Voyta所回答的,使用
。对中的代码进行计算,但不进行渲染,所以如果您想将结果放入html中,则需要添加=

如果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
%>
你可以这样写:

@user = User.find_by_id(session[:user_id])
<%= link_to 'New book', new_book_path if user && user.admin == 1 %>

这是:

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

@user = User.find_by_id(session[:user_id])
<%= link_to 'New book', new_book_path if user && user.admin == 1 %>
然后在您看来,正如@Voyta所回答的,使用
。对中的代码进行计算,但不进行渲染,所以如果您想将结果放入html中,则需要添加=

如果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
%>
你可以这样写:

@user = User.find_by_id(session[:user_id])
<%= link_to 'New book', new_book_path if user && user.admin == 1 %>


如果您不只是链接到源代码和正在发生的事情,而是将它们放在您的问题中,可能会更好。我当然不想为了知道你在问什么而打开四个不同的链接!如果你不只是链接到来源和正在发生的事情,而是把它们放在你的问题中,这可能会更好。我当然不想为了知道你在问什么而打开四个不同的链接!