#ruby-on-rails #ruby-on-rails-3
#ruby-on-rails #ruby-on-rails-3
Вопрос:
Я использую плагин devise, и там есть current_user
помощник. У моих пользователей может быть много профилей в приложении, поэтому у пользователя есть has_many :profiles
и всегда один из них активен.
Как и где я могу создать помощника current_profile
?
С уважением
Ответ №1:
Вы можете создать помощник в ApplicationController
, который сделает его доступным для всех контроллеров и представлений, которые наследуются от него:
class ApplicationController < ActionController::Base
protect_from_forgery
helper_method :current_profile
private
def current_profile
# get current_profile based on current_user here
end
end
Теперь вы можете использовать current_profile
в любых представлениях / контроллерах.
Ответ №2:
В User
классе я бы добавил метод
class User
has_many :profiles
def current_profile
@current_profile ||= profiles.where('current = ?', true).first
end
end
и затем внутри вашего контроллера / помощников вы могли бы просто написать:
current_user.current_profile
Надеюсь, это поможет.
Ответ №3:
Что касается того, как, на самом деле это просто вопрос определения того, какой профиль активен (я предполагаю, что у пользователя может быть ТОЛЬКО 1 активный профиль в данном сеансе — это упростит задачу). Итак, что вы делаете, это используете информацию о своем сеансе, чтобы узнать текущего пользователя, затем находите активный профиль, и бинго — готово.
Что касается where, это действительно вопрос области применения. Если вы хотите, чтобы вспомогательный метод был доступен для любого представления, просто объявите его в контроллере приложения, и у вас все должно получиться.