0

我在哪里定义多个控制器使用的辅助方法时遇到了一些麻烦。

我将此方法提取到它自己的模块中:

module ColumnMapHelper
  def drop_down_upload_file_types
    options = [["Use the RoyaltyZone Sales Upload Template", "RZ"], ["Use my own data file (Quickbooks, iTunes, etc)", "Create New"]]
    ...
    select_tag "file_upload_type", options_for_select(options, default), :id=>"upload_file_type_selection"
  end
end

我将它包含在控制器中并将其作为辅助方法公开:

class SalesDataController < ApplicationController
  before_filter :login_required, :except => [:download]

  include ColumnMapHelper
  helper_method :drop_down_upload_file_types

当它在我的控制器的帮助程序(app/helpers/sales_data_helper.rb)中定义时很好,但是现在当我在视图中调用我的帮助程序方法时出现此错误:

undefined method `options_for_select' for #<SalesDataController:0x109bbbd18>

我需要包含一些模块吗?分享这样的助手的最佳方式是什么?

4

2 回答 2

1

如果您只在视图中使用助手,那么您不需要做任何事情,因为 app/helpers 中的所有内容都默认包含在内。

当您拥有要与视图共享的 current_user 之类的方法时,您希望在控制器中使用 helper_method。

于 2013-02-16T00:00:06.993 回答
0

options_for_select是一个视图方法,它在控制器中不可用。但是,没有理由在控制器中使用它。

如果您将文件保存在ColumnMapHelper文件/app/helpers夹中,drop_down_upload_file_types您的所有视图都会自动使用该文件(只要您的应用程序默认包含所有帮助程序)。

于 2013-02-15T23:58:26.840 回答