Делает любой знает, почему я добираюсь
undefined method `my_method' for #<MyController:0x1043a7410>
когда я называю my_method ("строка") из моего подкласса ApplicationController? Мой контроллер похож
class MyController < ApplicationController
def show
@value = my_method(params[:string])
end
end
и мой помощник
module ApplicationHelper
def my_method(string)
return string
end
end
и наконец, ApplicationController
class ApplicationController < ActionController::Base
after_filter :set_content_type
helper :all
helper_method :current_user_session, :current_user
filter_parameter_logging :password
protect_from_forgery # See ActionController::RequestForgeryProtection for details
Вы не можете вызывать помощников из контроллеров. Лучше всего создать метод в ApplicationController
, если его нужно использовать в нескольких контроллерах.
РЕДАКТИРОВАТЬ : для ясности, я думаю, что большая часть путаницы (поправьте меня, если я ошибаюсь) проистекает из вызова helper: all
. helper: all
на самом деле просто включает всех ваших помощников для использования под любым контроллером на стороне представления. В более ранних версиях Rails пространство имен хелперов определяло, какие представления контроллеров могут использовать хелперы.
Надеюсь, это поможет.
Насколько мне известно, helper: all
делает помощников доступными в представлениях ...
Может я ошибаюсь, но разве помощники не только для представлений? Обычно, если вам нужна функция в контроллере, вы помещаете ее в ApplicationController, поскольку каждая функция доступна в его дочерних классах.