如何在Rails中区分相同的命名辅助方法?

时间:2012-06-22 08:41:40

标签: ruby-on-rails-3

我在两个不同的帮助者中创建了辅助函数(link_to_alert)

  1. app / helpers / posts_helper.rb
  2. app / helpers / students_helper.rb

现在从link_to_alert

调用我的帮助函数app/views/student/index.html.haml

问题是调用app/helpers/posts_helper.rb

中存在的相同函数的视图

如何从我的app/helpers/students_helper.rb视图中调用app/views/student/index.html.haml中的辅助函数?

2 个答案:

答案 0 :(得分:8)

由于默认情况下所有控制器都包含在所有控制器中,因此最常见的方法是以不同的方式命名函数,例如link_to_alert_postslink_to_alert_students

第二种方法是禁用包括所有帮助程序并在控制器中选择所需的帮助程序。

config.action_controller.include_all_helpers = false

class PostsController
  helper :posts
end

class StudentsController
  helper :students
end

在这种情况下,Posts Controller呈现的所有视图都将具有Posts Helper和Student Controller的功能 - 来自学生助手。

第三种方法是使用module_function并使用辅助模块名称为所有调用添加前缀。 我从来没有见过这个特别使用Rails助手。

module StudentsHelper
  module_function

  def link_to_alert
  end
end

StudentsHelper.link_to_alert

另一种方法是使用演示者或装饰者,但这是一个完全不同的主题。

答案 1 :(得分:0)

为什么不添加不同的名称,link_to_alert_postslink_to_alert_students
顺便说一句,您可以通过输入模块名称和函数名称来调用它。