Я хочу дать моим пользователям способность выбрать, как их общедоступная страница отображена от 5 различных разметок. Я предполагаю, что буду нуждаться в 5 различных файлах CSS согласно расположению и затем должен передать это в stylesheet_link_tag
Я знаю только, как сделать это использование если затем операторы. Я не предполагаю, что это - лучший способ. Какая-либо справка... также это могло быть сделано?
Спасибо
Вы должны сохранить макет, выбранный пользователем, в переменной сеанса (самый простой, но теряется, когда пользователь очищает файлы cookie или использует другой компьютер), или в вашей базе данных.
Допустим, у таблиц стилей пять имен, каждое из которых соответствует цвету:
blue_stylesheet.css
green_stylesheet.css
red_stylesheet.css
orange_stylesheet.css
white_stylesheet.css
Поместите эти файлы в public / stylesheets.
Сохраните выбранную пользователем таблицу стилей в переменной session [: style]
следующим образом:
session[:style] = 'green'
Это значение будет сохраняться до тех пор, пока пользователь не очистит свои файлы cookie.
Создайте файл application.erb в ваших макетах, если он еще не существует.Код в этом файле будет отображаться для каждого шаблона на вашем сайте. Он должен содержать строку вида <% = yield%>
. В этот файл поместите следующее:
<% = stylesheet_link_tag session [: style] + '_ stylesheet'%>
Вот и все!
Удачи!
Сначала попробуйте добавить поле «тема» в модель пользователя (используя миграции).
Затем добавьте несколько ссылок в представление (настройки пользователя):
link_to 'Изменить на зеленую тему',: controller => "user",: action => "set_theme",: id => "green"
Контроллер:
def set_theme
# don't forget to check, is there a theme with such params
current_user.update_attributes :theme => params[:id]
end
Контроллер общедоступного профиля:
def public_profile
@theme = 'default'
user = User.find(params[:user_id]) # profile's owner
@theme ||= user.theme # overriding default theme to custom one
end
макет:
<%=stylesheet_link_tag @theme %>