一个控制器和轨道视图有两个辅助类可能/好吗?

时间:2017-07-06 04:43:54

标签: ruby-on-rails model-view-controller

我有太多需要在我的视图中使用的函数,而且我的助手类看起来太长了。那么为单个控制器和视图设置两个辅助类是否可能/好?

如果是这样,如何定义第二个辅助类?

2 个答案:

答案 0 :(得分:1)

创建新助手:

  1. 选择帮助文件的名称,例如my_helper.rb
  2. 在/ app / helpers目录中创建文件
  3. 根据文件名创建模块。在这种情况下

    // MARK: example Web Service start here
    // TODO: example 1
    // FIXME: Please change BASE url before live 
    
  4. 将您的助手定义为方法

    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这样的宝石)。

相关问题