2013-12-04 4 views
1

Я нахожусь в разгаре своего первого приложения RoR и обнаружил, что снова набираю один и тот же код снова и снова ... конечно, я делаю что-то неправильно! Мое приложение имеет два различных типов пользователей (инвесторов и предпринимателей), и я постоянно ловлю себя пишу это в моих контроллеров:Лучший способ обработки пользовательских представлений?

def index 
    if current_user.user_type == "investor" 
    render "investor" 
    else 
    render "entrepreneur" 
    end 
end 

Я тогда представление для моих инвесторов и отдельное представление для своих предпринимателей. Хотя это работает, я знаю, что есть лучший способ! Может кто-нибудь, пожалуйста, просветит меня?

+0

Хм, почему бы вам не написать его в 'ApplicationController'? – user2422869

ответ

0

Если вам это нужно через несколько контроллеров, то просто создать новый метод в application_controller.rb

Вы могли бы определить метод, как это в вашем application_controller.rb

def user_type?(user) 
    return user.user_type.to_s 
end 

и переключать методы контроллера в использовать это как таковое

def index 
    render user_type?(current_user) 
end 

Но в этом отношении; если ваш случай использования настолько прост, почему бы просто не сделать это прямо в ваших методах контроллера, как это?

def index 
    render current_user.user_type.to_s 
end 

Редактировать, чтобы ответить на последующую вопрос


Если вы посмотрите на Rails Guide http://guides.rubyonrails.org/layouts_and_rendering.html разделе «Выбор раскладок во время выполнения» они в значительной степени обработки этого таким же образом, изложенные здесь.

Если разные типы пользователей видят 2 действительно разных страницы, тогда это путь; сохраняйте логику в контроллере или приложении_контроллера.

Если, однако, оба ваших типа пользователей видят практически одно и то же, но с небольшими отличиями или конкретным разделом страницы, тогда вы можете всегда отображать один и тот же вид независимо от типа пользователя. Затем вы можете проверить, чтобы составить представление нескольких партикулов, чтобы привести нужные фигуры в зависимости от пользователя. Ваш «логический код» следует избегать как можно больше, поэтому в этом случае вы захотите связать это с помощью вспомогательных методов, расположенных в/app/helers. Методы, определенные в /app/helpers/application_helper.rb, будут доступны для всех представлений. Вы также можете создавать методы управления конкретным видом контроллера в /app/helpers/controller_name_helper.rb

+0

Любите простоту вашего второго примера! Другое дело, что мне было интересно, должен ли я использовать совершенно другой метод предоставления пользовательских представлений - возможно, есть драгоценный камень, который я не знаю о том, что обрабатывает такие вещи? –

+0

Я добавил дополнительную информацию к моему ответу выше относительно вашего последующего вопроса, так как слишком долго было включать в комментарии. Надеюсь, поможет. – bigtunacan

0

Сделать его вспомогательным методом в контроллере приложения.

def user_role 
    current_user.user_type 
end 
helper_method :user_role 

Этот метод будет возвращать либо «инвестор» или «предприниматель» и делая вспомогательный метод, вы можете использовать его везде в контроллерах, хелперы, представления.

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