Вы можете предварительно обработать ваш файл Sass с помощью ERb. Это позволит вам использовать экземпляр переменные, установленные в контроллере или просмотр в файле .scss
. Сам файл можно просто рассматривать как обычный вид, отображаемый контроллером как часть действия.
Этот код не проверен, но он должен дать вам место для начала. Предполагается, что вы сохраняете цветовые предпочтения пользователя как часть самой модели User
.
Сначала определите пользовательское действие на UsersController
:
# config/routes.rb
match '/users/:id/styles' => 'users#styles', :as => :user_styles
Ссылка на "таблицы стилей" в макете:
# app/views/layouts/application.html.erb
= stylesheet_link_tag 'application', user_styles_path(current_user, :format => 'css')
Определите действие в контроллере. Вы можете делать все, что вы хотите получить предпочтения пользователя здесь:
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def styles
@colors = User.find(params[:id]).colors
end
end
Это действие будет автоматически сделать этот вид:
# app/views/users/styles.css.scss.erb
$background-color: <%= @colors[:background] %>;
body {
background-color: $background-color;
}
Adapt по мере необходимости.
Awesome, спасибо за место, чтобы начать – MrDevin
Добро пожаловать. Убедитесь, что вы [принимаете ответ] (http://stackoverflow.com/faq#howtoask), если он работает для вас. – Brandan
В моем контроллере мне понадобилось «render: text => Sass :: Engine.new (render_to_string, syntax:: scss) .render', чтобы получить scss для рендеринга. Другой мудрый прекрасный ответ, спасибо снова. – MrDevin