您好我在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页面中调用问题?
答案 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
你应该全力以赴。祝你好运!