我在app / controllers / api / v1中有一个控制器Api::V1::UsersController
。
我在app / helpers / api / v1中有一个帮助模块Api::V1::ErrorHelper
。
我想访问控制器内的辅助模块的方法。所以,我调用了控制器的辅助方法,将模块传递给它:
class Api::V1::UsersController < ApplicationController
helper Api::V1::ErrorHelper
#other code
end
但是当我访问控制器内部的一个辅助方法(respond_with_error)时,我得到以下异常:
undefined method `respond_with_error' for #<Api::V1::UsersController:0x007fad1b189578>
如何从控制器访问此帮助程序?
(我正在使用Rails 3.2)
感谢。
答案 0 :(得分:5)
助手在视图中混合,而不是在控制器中。例如,如果您有以下帮助者
module Authentication
def current_user
# ...
end
end
并将其包含在任何控制器中
helper Authentication
从操作中调用current_user
将引发未定义的方法错误。
如果要为视图和控制器提供一些方法,则需要采用不同的方法。定义方法并将模块包含为普通模块。
class MyController < ApplicationController
include Authentication
end
并将这些方法作为助手使用。
class MyController < ApplicationController
include Authentication
helper_method :current_user
end
您还可以利用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
答案 1 :(得分:2)
helper
在您的视图中包含该模块,将其包含在您的控制器中,只包括'include Api :: V1 :: ErrorHelper`。
但是在控制器中包含视图帮助器并不是一个好主意,你应该将它放在其他地方(也许是你的lib
目录)并且不要把它称为帮助器,因为它不是视图助手,但是一个控制器助手。