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
我有两个问题:
Rails是否根据调用该方法的视图位置了解要调用的方法?
我想强制调用非管理员帮助程序,管理员视图或管理员视图中的帮助程序?怎么做的?
答案 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) %>