【问题标题】:Calling helper method from an admin view从管理视图调用辅助方法
【发布时间】:2017-04-01 15:08:50
【问题描述】:
Rails 3.2

我继承了一个应用程序,该应用程序具有管理员和非管理员部分。所以,我有:

app/views/admin/....
app/views/....
app/helpers/admin/...
app/helpers/....

我不确定如何从视图中调用辅助方法。举个例子:

在 app/helpers/admin/users_helper.rb 中,如果我有:

def compute_total qty, price, commission
  (qty * price) + commission
end

在 app/helpers/users_helper.rb 中,如果我有:

def compute_total qty, price
  qty * price
end

我有两个问题:

  1. Rails 是否根据调用该方法的视图位置了解调用哪个方法?

  2. 我想从管理员视图强制调用非管理员助手,还是从管理员视图强制调用助手?这是怎么做到的?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您在 Rails 上编写的视图辅助方法可用于所有视图并且混合在一起(从 Rails 4 开始)。每当名称重复时,rails 将通过按字母顺序选择后一种方法来处理此问题。例如,

    module CustomHelper
      def compute_total qty, price, commission
      ......
    end
    
    module KustomHelper
      def compute_total qty, price
      ......
    end
    

    在上面的示例中,将始终调用的是来自 KustomHelper 的那个。

    对于第二个问题,我建议只使用一种方法,可以同时处理这两种情况,例如:

    def compute_total(qty, price, commission = 0)
      (qty * price) + commission
    end
    

    您可以在任何地方声明该方法并在任何地方调用它,不用担心。

    好的参考:https://mixandgo.com/blog/the-beginners-guide-to-rails-helpers

    更新:

    我没有看到OP使用4以下的版本,所以针对OP的特殊问题的解决方案:

     # lib/custom_lib.rb
     class CustomLib
       def compute_total(qty, price, commission = 0)
         qty * price) + commission
       end
     end
    

    然后从视图中调用它:

     <%= CustomLib.new.compute_total(qty, price) %>
    

    【讨论】:

    • 请注意,这个应用程序使用的是 Rails 3.2,而不是 4。
    • 抱歉没有看到rails版本,我给你的建议是使用lib类来封装这个方法,而不是使用helper文件
    • 我知道我可以创建一个库。我正在处理的是现有代码,以前的开发人员留下了管理员助手和非管理员助手。我试图了解范围是如何解决的。
    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2011-03-27
    • 2019-06-05
    相关资源
    最近更新 更多