Rails Namespaced Helper

sep*_*err 2 ruby ruby-on-rails helper

Api::V1::UsersController在app/controllers/api/v1中有一个控制器.我Api::V1::ErrorHelper在app/helpers/api/v1中有一个帮助模块.

我想访问控制器内的辅助模块的方法.所以,我调用了控制器的辅助方法,将模块传递给它:

class Api::V1::UsersController < ApplicationController

  helper Api::V1::ErrorHelper

  #other code
end
Run Code Online (Sandbox Code Playgroud)

但是当我访问控制器内部的一个辅助方法(respond_with_error)时,我得到以下异常:

undefined method `respond_with_error' for #<Api::V1::UsersController:0x007fad1b189578>
Run Code Online (Sandbox Code Playgroud)

如何从控制器访问此帮助程序?

(我使用的是Rails 3.2)

谢谢.

Sim*_*tti 5

助手在视图中混合,而不是在控制器中.例如,如果您有以下帮助程序

module Authentication
  def current_user
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

并将其包含在任何控制器中

helper Authentication
Run Code Online (Sandbox Code Playgroud)

current_user从动作调用将引发未定义的方法错误.

如果要为视图和控制器提供一些方法,则需要采用不同的方法.定义方法并将模块包含为普通模块.

class MyController < ApplicationController
  include Authentication
end
Run Code Online (Sandbox Code Playgroud)

并使方法可用作帮助程序.

class MyController < ApplicationController
  include Authentication

  helper_method :current_user
end
Run Code Online (Sandbox Code Playgroud)

你也可以利用included钩子.

class MyController < ApplicationController
  include Authentication
end

module Authentication
  def self.included(base)
    base.include Helpers
    base.helper  Helpers
  end

  module Helpers
    def current_user
    end
  end
end
Run Code Online (Sandbox Code Playgroud)