Проблем при използването на 'helper_method' и шаблони за изобразяване

Използвам 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'.


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


Отговори (1)


Helper_method е практически почти същият като дефиниращ метод в accounts_helper.rb (технически той оценява кода спрямо помощен клас). За да използвате този помощник, трябва да го дефинирате в помощен модул и да го включите в контролери, където се показва шаблонът, предназначен да бъде изобразен.

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

Примери:

module Users::AccountsHelper
  code_here
end

class ApplicationHelper
  helper Users::AccountsHelper
end

всички помощни методи за акаунти ще бъдат достъпни в приложението

person Sigurd    schedule 22.03.2011