2013-09-18 2 views
0

У меня есть 3 разных роли в моем приложении: Гость, Пользователь и Администратор. На некоторых страницах должен быть другой макет, на основе которого просматривается страница. Мне было интересно, есть ли более простой способ сделать это, чем то, что я делаю.Rails: разные макеты, основанные на разных ролях

Например, у меня в настоящее время имеется 3 разных макета. И в моем VenuesController у меня есть 3 разных действия ниже. Но мне кажется, что должен быть более простой способ.

def index 
    @venues = Venue.paginate(page: params[:page]).order("name ASC") 
end 

def admin_index 
    @venues = Venue.paginate(page: params[:page]).order("name ASC") 
    render layout: "admin" 
end 

def user_index 
    @venues = Venue.paginate(page: params[:page]).order("name ASC") 
    render layout: "user" 
end 

Я полагаю, я мог бы одно index действия, а затем внутри нее проверить, какую роль моей current_user имеет?

ответ

0

Использование файлов макетов, названных для ролей, является прекрасным.

def index 
    @venues = Venue.paginate(page: params[:page]).order("name ASC") 
    # substitute your favorite current_user check and role name method 
    render layout: current_user.present? ? current_user.role.name : 'application' 
    # app/views/layouts/admin.html.erb 
    # app/views/layouts/user.html.erb 
    # app/views/layouts/application.html.erb 
end 

Обратите внимание, что в зависимости от фактических различий (или нет) между этими раскладками, он может быть более простым и в обслуживании, чтобы использовать хелпер и такими в пределах одного макета для определения видимого содержимого. Вы также можете использовать партию part-name'd, или разрезать и нарезать любой из этих методов, независимо от того, какая степень имеет смысл для вас.

Смежные вопросы