如何在rails .erb中调用一个关注方法?

时间:2016-11-22 05:06:42

标签: ruby-on-rails ruby

您好我在model / concerns / permissions_concern

中有这个问题

这将检查我的users表和permission_level列,类型为integer.So如果用户具有管理员权限我希望他能够在Navbar中访问特定链接

module PermissionsConcern
    extend ActiveSupport::Concern
    def is_normal_user?
      self.permission_level >= 1
    end

    def is_editor?
      self.permission_level >= 2
    end

    def is_admin?
      self.permission_level >= 3
    end 
end

我想知道是否可以将模块调用到erb页面,例如:

<li class="nav-item">
  <% if is_admin? %>
         <%= link_to "Dashboard", articles_path, class: 'nav-link' %>
    <%else%> 
         <li class="nav-item">
         <%= link_to 'Login', new_user_session_path, class: 'btn btn-outline-success' %>
         </li>
         <li class="nav-item">
      <%= link_to 'Register', new_user_registration_path, class: 'btn btn-outline-info' %>
         </li>
  <%end%>

</li>

但是我收到了这个错误

未定义的方法`is_admin?'对于#&lt;#:0x007f962f818680&gt;这是好的,因为不是一种方法。但有没有办法在erb页面中调用问题?

2 个答案:

答案 0 :(得分:1)

如果您有疑问,则需要 if PermissionsConcern.is_admin? 或指定完整路径:

self

问题是,如果你打算在视图中使用它,你可能想要帮助它。那些对func makeVertexIndex(_ array: [Float]) -> ([Vertex], [Int]) { var newVertices = [Vertex]() for i in stride(from: 0, to: array.count, by: 8) { newVertices.append(Vertex(x: array[i], y: array[i + 1], z: array[i + 2], nx: array[i + 3], ny: array[i + 4], nz: array[i + 5], s: array[i + 6], t: array[i + 7])) } if newVertices.count > Set(newVertices).count { var uniqueVertices = [Vertex]() var indices = [Int]() var vertexIndex = [Vertex: Int]() var count = 0 for vertex in newVertices { if let existingVertex = vertexIndex[vertex] { indices.append(existingVertex) } else { vertexIndex[vertex] = count uniqueVertices.append(vertex) count += 1 } } return (uniqueVertices, indices.sorted()) } else { return (newVertices, [Int](0..<newVertices.count)) } } 的引用在一个特别关注的范围内将毫无意义。

答案 1 :(得分:1)

要为tadman的答案添加一些上下文,通常会使用注意事项来合并多个模型使用的方法。这看起来并不像你想要完成的事情。您似乎正在尝试简化视图逻辑。要做到这一点,助手是要走的路。因此,您需要is_admin?找到当前登录用户并查看其权限级别的方法。

您有一个名为application_helper.rb的应用程序范围的帮助文件。我可以将其放在is_admin?中,而不是让User成为您关注的问题(我假设它包含在您的application_helper.rb模型中),它可以用于您的所有观看次数。但是你有问题! is_admin?方法无法了解用户,因此会爆炸。如果您使用Devise进行身份验证,则应使用current_user方法引用已登录的人。您可以在is_admin?中更改application_helper.rb方法提交到:

def is_admin?
  current_user.permission_level >= 3
end

你应该全力以赴。祝你好运!

关于问题的更多信息:https://stackoverflow.com/a/25858075/320490