Разный набор представлений для разных ролей пользователя - PullRequest
3 голосов
/ 01 июля 2010

Я занимаюсь разработкой приложения для rails, и у меня 2 разные роли пользователя : расширенный и базовый.

Вместо того чтобы скрывать ссылки в основных представлениях пользователя (например, с помощью CanCan), я хочу управлять 2 различными наборами представлений : один для опытного пользователя и один для основного пользователя.

В настоящее время я работаю таким образом:

 case current_operator.op_type
      when 'basic'
        format.html { render :template => "devices/index_basc.html.erb" }
      when 'advanced'
        format.html # index.html.erb
 end

Но я не хочу указывать при каждом действии шаблон для основного пользователя ({render: template => "devices / index_basc.html.erb"}) Я думаю, что есть какой-то другой путь (надеюсь, более аккуратный:)

У вас есть идеи?

Спасибо, Alessandro

Ответы [ 2 ]

7 голосов
/ 01 июля 2010

Вы можете сделать что-то вроде этого Railscast Мобильные устройства :

в config/initializers/mime_types.rb добавить:

Mime::Type.register_alias "text/html", :basic 

в app/controllers/application_controller.rb добавить:

before_filter :check_user_status
private
def check_user_status
  request.format = :basic if current_operator.op_type == 'basic'
end

Теперь вы можете просто сделать следующее в своих контроллерах:

class SomeController < ApplicationController
  def index
    # …
    respond_to do |format|
      format.html  # index.html.erb
      format.basic # index.basic.erb
    end
  end
end
0 голосов
/ 01 июля 2010

Поскольку у вас есть только две разные роли пользователя, вы можете сделать это

page = (current_operator.op_type =='basic')?  "devices/index_basc.html.erb"  : "index.html.erb"
format.html { render :template => page}
...