создать помощник current_something

#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, это действительно вопрос области применения. Если вы хотите, чтобы вспомогательный метод был доступен для любого представления, просто объявите его в контроллере приложения, и у вас все должно получиться.