@template
- это объект, в вашем случае nil
.Если у этого объекта нет метода (my_helper_method
), его нельзя вызвать (особенно если он не равен nil).
Методы, определенные в помощниках, вызываются как обычные методы.Но не в контроллерах, они называются в представлениях.Ваш helper :all
просто делает все помощники доступными для просмотра.
Итак, по вашему мнению: my_helper_method :arg1, :arg2
Если вам нужен метод для вашего объекта (@template
), вам нужно дать этому объекту этот метод.
Пример:
class Template < ActiveRecord::Base
def my_helper_method
# do something on a template instance
end
end
class MyController < ApplicationController
def foo
@template = Template.first
@template.my_helper_method # which actually isn't a helper
end
end
Что делают помощники:
module MyHelper
def helper_method_for_template(what)
end
end
# in your view
helper_method_for_template(@template)
Смешивание в помощнике (помните о беспорядке)в вашем коде при смешивании помощников вида с видами и моделями)
class Template < ActiveRecord::Base
include MyHelper
# Now, there is @template.helper_method_for_template(what) in here.
# This can get messy when you are making your helpers available to your
# views AND use them here. So why not just write the code in here where it belongs
# and leave helpers to the views?
end