Мое приложение должно отображать html, чтобы ответить, когда пользователь нажимает ajax-ссылку.Мои вспомогательные методы в контроллере
Мой контроллер:
def create_user
@user = User.new(params)
if @user.save
status = 'success'
link = link_to_profile(@user) #it's my custom helper in Application_Helper.rb
else
status = 'error'
link = nil
end
render :json => {:status => status, :link => link}
end
Моя помощница:
def link_to_profile(user)
link = link_to(user.login, {:controller => "users", :action => "profile", :id => user.login}, :class => "profile-link")
return(image_tag("/images/users/profile.png") + " " + link)
end
Я попробовал такие методы:
ApplicationController.helpers.link_to_profile(@user)
# It raises: NoMethodError (undefined method `url_for' for nil:NilClass)
и:
class Helper
include Singleton
include ActionView::Helpers::TextHelper
include ActionView::Helpers::UrlHelper
include ApplicationHelper
end
def help
Helper.instance
end
help.link_to_profile(@user)
# It also raises: NoMethodError (undefined method `url_for' for nil:NilClass)
Кроме того, да, я ЗНАЮ о: helper_method, и он работает, но я не хочу перегружать мой ApplicationController большим количеством таких методов.
Да, я пробовал свой первый метод, но я получил: NoMethodError (неопределенный метод 'url_for 'для nil: NilClass). Я думаю, вспомогательный модуль не может получить доступ к помощникам ActionView – FancyDancy
Yap, вы должны иметь доступ к контексту контроллера. –
Я обновил свой ответ, чтобы принять во внимание то, что вы сказали. –