从管理视图调用辅助方法

时间:2017-04-01 15:08:50

标签: ruby-on-rails

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. 我想强制调用非管理员帮助程序,管理员视图或管理员视图中的帮助程序?怎么做的?

1 个答案:

答案 0 :(得分: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) %>