Я использую 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. руб.