Ruby on rails 在rails中使用if语句根据登录者显示指向标记的链接?
Rails初学者,我正在制作一个带有Desive身份验证的Rails新闻页面,当有人访问localhost:3000/news时,它会显示一个新闻列表。我试图显示“编辑”链接,只有当它是由当前用户张贴或如果当前用户的用户名是“管理员”。这是我的代码Ruby on rails 在rails中使用if语句根据登录者显示指向标记的链接?,ruby-on-rails,ruby,authentication,devise,Ruby On Rails,Ruby,Authentication,Devise,Rails初学者,我正在制作一个带有Desive身份验证的Rails新闻页面,当有人访问localhost:3000/news时,它会显示一个新闻列表。我试图显示“编辑”链接,只有当它是由当前用户张贴或如果当前用户的用户名是“管理员”。这是我的代码 <% @news.each do |element| %> <p>Title: <%= element.title%></p> <p><%= eleme
<% @news.each do |element| %>
<p>Title: <%= element.title%></p>
<p><%= element.body%></p>
<li>Posted by: <%= element.user.username %></li>
<li><%= link_to "Comments", newsone_path(element) %></li>
<% if current_user.username == "admin" || current_user == element.user %>
<li><%= link_to "Edit this drink", edit_news_path(element) %></li>
<% end %>
<% end %>
标题:
投寄人:
它可以工作,并且仅当用户名“admin”已登录或发布它的用户已登录时才显示编辑链接。但是,如果我尝试在不登录的情况下转到localhost:3000/news
,则会显示一个错误
第行“nil:NilClass”的未定义方法“username”
我想这可能是因为当我注销时,可能没有用户名?如何解决此问题,请帮助?此处设计的是将
当前用户设置为nil
,该设置没有方法.username
为了避免这种情况,您可以在尝试调用该方法之前检查当前用户是否存在
一种易于阅读的方法是这样做:
<% if current_user && (current_user.username == "admin" || current_user == element.user) %>
在开发此功能时,您可能希望查看Rolify gem或类似的功能,这样您就可以拥有各种不同的命名角色,然后是一个权限gem,例如Pundit,它允许您定义不同类型的用户可以做什么和不能做什么
<% if current_user.try(:username) == "admin" || current_user == element.user %>