У меня есть следующий метод application_controller:Когда я должен использовать пользователь before_filter vs helper_method?
def current_account
@current_account ||= Account.find_by_subdomain(request.subdomain)
end
Должен ли я называть его помощью before_filter или helper_method? В чем разница между этими двумя и что я должен рассматривать с точки зрения компромиссов в этом случае?
Спасибо.
ОБНОВЛЕНИЕ ДЛЯ УЛУЧШЕНИЯ CLARITY
Я нахожу, что я могу пользователь по before_filter
вместо helper_method
в том, что я могу назвать контроллер определенные методы из моих взглядов. Может быть, это что-то в том, как я организовал мой код, так вот, что у меня есть:
контроллеры/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
include SessionsHelper
before_filter :current_account
helper_method :current_user
end
хелперы/sessions_helper.rb
module SessionsHelper
private
def current_account
@current_account ||= Account.find_by_subdomain(request.subdomain)
end
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
def logged_in?
if current_user
return true
else
return false
end
end
end
контроллеры/пробелы_controller.rb
class SpacesController < ApplicationController
def home
unless logged_in?
redirect_to login_path
end
end
end
просмотров/пространства/home.html.erb
<%= current_account.inspect %>
В теории, это не должно работать, не так ли?
Я использую before_filter в этом методе в настоящее время и могу назвать это из своих представлений. Я что-то упускаю? – Nathan
Если этот метод определен внутри контроллера, вы не можете его вызывать в представлении, если только вы не обращаетесь к переменной экземпляра ** @ current_account **, что было бы плохой практикой. –
@ MaurícioLinhares, неправда. Если он называет 'helper_method: current_account' в контроллере, метод будет доступен в представлениях. – tsherif