Маршрут в зависимости от того, является ли пользователь художником - PullRequest
0 голосов
/ 13 апреля 2011

Я бы хотел настроить свои маршруты в зависимости от того, является ли пользователь художником.Так, например, что-то вроде:

namespace 'dashboard' do
    if current_user.is_artist
       get '/settings', :to => 'users#edit', :as => 'account_settings'
       put '/settings', :to => 'users#update', :as => 'account_settings'
       delete '/settings', :to => 'users#destroy', :as => 'account_settings'
    else
       get '/settings', :to => 'artists#edit', :as => 'account_settings'
       put '/settings', :to => 'artists#update', :as => 'account_settings'
       delete '/settings', :to => 'artists#destroy', :as => 'account_settings'
    end
end

К сожалению, я не могу получить доступ к current_user в route.rb.Однако логика приведенного выше кода объясняет мои намерения.

Есть ли способ, которым я могу этого достичь?

Ответы [ 5 ]

0 голосов
/ 13 апреля 2011

Как объяснил Elad, сама маршрутизация не может определить, является ли текущий пользователь художником или нет.

Если вы хотите сохранить один URL с двумя различными режимами поведения и представлениями, вы можете использовать один контроллер, например:

def settings
    if current_user.is_artist
        do something
        render :action => "artist_settings"
    else
        do something else
        render :action => "users_settings"
    end      
end
0 голосов
/ 13 апреля 2011

Ваш файл маршрутизации просто определяет, какое действие контроллера вызывается на основе URL. Вы можете сопоставить как художников, так и пользователей одному контроллеру и разместить логику для отображения экрана в этом контроллере, глядя на пользователя. По умолчанию контроллеры отображают представление, основанное на имени контроллера и метода, но вы можете переопределить это и отобразить любое представление, которое захотите. Используйте ваш маршрут для отправки запросов на соответствующие действия редактирования / обновления / уничтожения и вставьте свою логику пользователя / исполнителя в эти действия, чтобы отобразить файл users / edit.html.haml или artist / edit.html.haml ...

0 голосов
/ 13 апреля 2011

Таблица маршрутизации не выполняется в контексте определенного пользователя. Это связано с тем, что он направляет запрос до достижения кода управления сеансом, поэтому не может определить, кто является текущим пользователем.

Я могу придумать два решения:

  1. Рендеринг ссылок на настройки с помощью какого-либо метода, который переписывает их, если пользователь является художником. Таким образом, «художники» и «пользователи» получают разные URL.
  2. Добавьте before_filter в свой контроллер UserSettings, который ловит запросы от художников и перенаправляет их в ArtistSettings (не уверен в своей внутренней структуре, но вы, вероятно, получите общее представление).
0 голосов
/ 13 апреля 2011

Вы можете создать часть промежуточного программного обеспечения, которое вычисляет пользователя на уровне, прежде чем оно попадет в реальное приложение.Это то, что смотрит, например, смотритель.Добавьте пользовательский объект в переменную env, и вы сможете получить к нему доступ в любом месте стека.

0 голосов
/ 13 апреля 2011

из того, что у вас есть, похоже, что вы создали роль, называемую художниками.все, что вам нужно сделать для того, чтобы ваш метод current_user работал, это: в вашем контроллере аккаунта вы можете настроить фильтр перед тем, как сказать before_filter: check_user_role: only =>: account_setting.тогда вы должны установить свои account_settings для различных ролей и их различных методов перенаправления_totost для вызова у вас.Я работаю над аналогичным проектом, и он работает для меня.я надеюсь, что это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...