Проблемы с использованием 'helper_method' и шаблонов рендеринга

Я использую Ruby on Rails 3 и пытаюсь установить helper_method, который должен работать только для контроллера (пример: AccountsController) и для всех связанных с ним представлений, а также когда его представления отображаются в других представлениях, не связанных с этим контроллером. Я черпаю вдохновение из Railcast "Ограничение доступа".

В моем файле account_controller.rb у меня есть

# Just to know, I am using a User namespace...
class Users::AccountsController < ApplicationController
  helper_method :show_authorization

  def show_authorization
    false # This returning value is just an example
  end
end

В моем файле views/users/accounts/show.html.erb у меня есть

<% if show_authorization %>
  You are authorized!
<% else %>
  You are NOT authorized!
<% end %>

Приведенный выше код работает, если я просматриваю URL-адрес http://<my_app_name>/users/accounts/1, но если я отображаю файл show.html.erb как шаблон в другом файле представления следующим образом:

<%= render :template => "/users/accounts/show", :locals => { :account => @account } %>

Я получаю сообщение об ошибке:

NameError in Users#show 
undefined local variable or method `show_authorization' for #<#<Class:...>

Почему? Как я могу решить эту проблему, чтобы сделать метод AccountsController show_authorization доступным для представления show.html.erb, когда оно отображается в другом представлении, связанном с другим контроллером?

PS: Поскольку show_authorization относится только к AccountsController и его файлу представлений, я хотел бы не вставлять соответствующий код в файл application_controller.rb, а сохранить его в файле account_controller. руб.


person user502052    schedule 22.03.2011    source источник


Ответы (1)


Метод helper_method практически аналогичен определяющему методу в account_helper.rb (технически это проверка кода на соответствие вспомогательному классу). Чтобы использовать этот помощник, вам нужно определить его в вспомогательном модуле и включить в контроллеры, где должен отображаться шаблон шоу.

Фактическая проблема заключается в том, что другой контроллер ничего не знает о помощниках вашего контроллера учетных записей, пока вы явно не потребуете их включить.

Примеры:

module Users::AccountsHelper
  code_here
end

class ApplicationHelper
  helper Users::AccountsHelper
end

все вспомогательные методы учетной записи будут доступны в приложении

person Sigurd    schedule 22.03.2011