Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中使用if语句根据登录者显示指向标记的链接?_Ruby On Rails_Ruby_Authentication_Devise - Fatal编程技术网

Ruby on rails 在rails中使用if语句根据登录者显示指向标记的链接?

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

Rails初学者,我正在制作一个带有Desive身份验证的Rails新闻页面,当有人访问localhost:3000/news时,它会显示一个新闻列表。我试图显示“编辑”链接,只有当它是由当前用户张贴或如果当前用户的用户名是“管理员”。这是我的代码

    <% @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 %>