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)
谢谢.
助手在视图中混合,而不是在控制器中.例如,如果您有以下帮助程序
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)