【问题标题】:Search inside hash in another class在另一个类的哈希中搜索
【发布时间】:2017-10-31 20:19:16
【问题描述】:

我有以下结构:

政策/权限

权限文件夹内:

car.rb
bus.rb
bike.rb

每个权限文件都有一个哈希:

MAPPING = {
   create: [:admin]
   delete: [:admin]
   etc
}

在权限类(策略文件夹)我有以下方法来检查权限:

class Permission
   def self.keys_for(model)
     # ?
   end
end

如何根据作为参数传递的模型动态搜索 MAPPING 哈希?

谢谢。

【问题讨论】:

  • 型号名称我们可以认为是汽车、公共汽车、自行车,对吧?
  • 抱歉,是的,型号名称是 Car、Bus、Bike
  • 发布了一个答案,可以让您获得整个 MAPPING 哈希,但也许您只是想要该哈希的键?你能澄清一下吗?
  • 是的,我需要获取整个哈希值。

标签: ruby-on-rails ruby metaprogramming


【解决方案1】:
class Permission
  def self.keys_for(model_name)
    eval(model_name).const_get(:MAPPING)
  end
end

但是,您是否考虑过一个实现,其中Permission 是一个concern,它被包含在每个模型中,这样您就不必显式地传递类?

【讨论】:

  • 谢谢,问题是模型变量是一个字符串:“Bike”、“Car”等。有没有办法根据名称将此字符串绑定到模型?
  • 好的,已针对该场景进行了更新。以为是类,因为变量名。
  • 另外,如果你可以传入类,那会比使用eval 更干净,这通常是代码异味。
  • @gui12344455 太棒了! SO 习惯上赞成/接受有用的答案;)
【解决方案2】:
class Permission
  def self.keys_for(model)
    f = File.open("#{model}.rb") #f give you the permissions hash
  end
end

注意事项:确保模型参数与文件名相同,并注意文件路径。

希望你明白我的意思

【讨论】:

    猜你喜欢
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    相关资源
    最近更新 更多