2016-03-06 2 views
0

Я использую Rails 4.2.5. У меня есть эта строка в моем файле «приложение/просмотров/макеты/application.html.erb» ...Как включить другой файл, если мой пользователь вошел в систему?

<%= yield %> 

Если пользователь вошел в систему, я хотел бы, чтобы отобразить содержимое на странице «./app/ views/user_objects/index.html.erb ", но если это не так, я хотел бы отображать содержимое со страницы" app/views/pages/_welcome.html.erb ". Я не знаю, как это сделать. В моей конфигурации/routes.rb файла У меня есть

constraints lambda { |req| !req.session[:user_id].blank? } do 
    root :to => 'user_objects#index', as: "dashboard" 
end 

root to: 'pages#index' 

но отображает файл «./app/views/user_objects/index.html.erb» в любое время, даже если пользователь не вошел в систему Что мне нужно добавить (или удалить), чтобы я мог отображать обычное содержимое страницы приветствия, если пользователь не вошел в систему?

+0

Вы используете Завещание для входа в систему? – akz92

ответ

0

Я бы сделал это несколько иначе. В моей конфигурации/routes.rb я бы просто обычный

root 'pages#index' 

, а затем я изменил мой индексный метод на приложение/контроллеры/pages_controller.rb к

def index 
    if logged_user? 
    render 'user_objects/index' 
    end 
end 

, а затем я бы поместил всю эту логику, чтобы сказать, зарегистрирован ли пользователь в файле logged_user? Метод как

def logged_user? 
    !session[:user_id].blank? 
end 

Есть другие способы для этого, конечно. Но всегда имейте в виду KISS Principle.

Если вы действительно хотите, чтобы понять весь процесс рендеринга, было бы лучше, чтобы дать некоторое внимание к http://guides.rubyonrails.org/layouts_and_rendering.html

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