【问题标题】:Undefined method `options_for_select'未定义的方法“options_for_select”
【发布时间】:2013-02-15 23:26:00
【问题描述】:

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

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

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>

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

【问题讨论】:

  • 将它包含在控制器中是否有原因?
  • 我在某处读过将共享辅助方法放入 ApplicationController。

标签: ruby-on-rails ruby helpers


【解决方案1】:

如果您只在视图中使用帮助器,那么您无需执行任何操作,因为默认情况下会包含 app/helpers 中的所有内容。

当您想要与视图共享的方法(如 current_user)时,您希望在控制器中使用 helper_method。

【讨论】:

    【解决方案2】:

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

    如果您将ColumnMapHelper 文件保存在/app/helpers 文件夹中,则drop_down_upload_file_types 将自动对您的所有视图可用(只要您的应用默认包含所有助手)。

    【讨论】:

    • 它可以在全球范围内访问吗?没有命名空间前缀?
    • 可以,只要您在视图中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2013-06-11
    • 1970-01-01
    • 2010-12-30
    • 2019-12-25
    • 2021-07-25
    相关资源
    最近更新 更多