Използвам Ruby on Rails 3 и се опитвам да задам helper_method
, който трябва да работи само за контролер (пример: AccountsController) и за всички изгледи, свързани с това, също и когато неговите изгледи се изобразяват в други изгледи, които не са свързани с този контролер. Черпя вдъхновение от Railcast „Ограничаване на достъпа“.
В моя файл accounts_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
, когато той се изобразява в друг изглед, свързан с друг контролер?
P.S.: Тъй като show_authorization
е свързан само с AccountsController и неговия файл с изгледи, бих искал да не вмъквам свързания код във файла „application_controller.rb“, а да го запазя в „accounts_controller“. rb'.