我有太多需要在我的视图中使用的函数,而且我的助手类看起来太长了。那么为单个控制器和视图设置两个辅助类是否可能/好?
如果是这样,如何定义第二个辅助类?
答案 0 :(得分:1)
创建新助手:
根据文件名创建模块。在这种情况下
// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live
将您的助手定义为方法
module MyHelper
end
答案 1 :(得分:1)
试试这个。
rails new example_app
cd example_app/
rails g scaffold Page title:string
rake db:migrate
rails s -p 3001
现在创建2个帮助者:
touch ./app/helpers/a_helper.rb
touch ./app/helpers/b_helper.rb
现在将以下模块放在各自的文件中。
module AHelper
def same_method_name
"Hi from AHelper"
end
end
module BHelper
def same_method_name
"Hi from BHelper"
end
end
现在在./app/views/pages/index.html.erb
里面把这个辅助方法放在了某个地方。
<%= same_method_name %>
并访问localhost:3001/pages
您会在页面中看到Hi from BHelper
。
所有帮助程序模块都包含在您的视图中,并将根据它们包含的顺序相互覆盖。
现在试试这个:
module BHelper
def same_method_name
"Hi from BHelper #{super}"
end
end
super
将继续上传继承链,继续使用名为same_method_name
的下一个方法,该方法为AHelper
&#39; #same_method_name
,这样您就可以{ {1}}
如果想要快速简单的解决方案,Rails助手是好的,但如果需要更多的封装,请考虑使用装饰器模式(例如使用像Draper这样的宝石)。