Можем ли мы использовать scss (sass-rails) в файлах представления rails css.erb или это просто конвейер ресурсов?

Я хочу знать, можем ли мы использовать scss в представлениях рельсов, например

/views/home/home_stylesheet.css.scss.erb

$gray-medium-light : #eaeaea;

background: $gray-medium-light;

Я пробовал изменить формат пути

<%= stylesheet_link_tag(about_me_user_path(current_user, format: :scss), media: 'all', class: "home_about_me_css") %>

А также в маршрутах

get    'user_profile_stylesheet/:id'  => 'users#user_profile_stylesheet',  as: :user_profile_stylesheet, :defaults => { :format => 'scss' }

Но рельсы, кажется, просто конвертируют формат обратно в css.

Можем ли мы использовать sass-rails гем как-нибудь сделать?

Спасибо.

ИЗМЕНИТЬ Я погуглил, но ничего не вышло.

1 ответ

Решение

Теоретически это возможно при вызове компилятора sass. Обратите внимание, что вы хотите использовать запрос css, а не scss. Нет причин, по которым клиенту нужно знать, как создается файл.

<%= stylesheet_link_tag(about_me_user_path(current_user, format: :css), media: 'all', class: "home_about_me_css") %>

class UsersController
  def user_profile_stylesheet
    respond_to do |f| 
      f.css do
        fn = Rails.root.join('app', 'views', 'home', 'home_stylesheet.css.scss.erb')
         # expand ERB template
        sass = render_to_string(file: fn)
        # run rendered template through the sass compiler
        css = SassC::Engine.new(sass, style: :compressed).render 
        render text: css
      end
    end  
  end
end   

Я не уверен, что это то, чем вы действительно хотите заниматься в продакшене, поскольку это требует, чтобы вы компилировали sass во время выполнения при ответе на запросы. И вы не сможете ссылаться на какие-либо функции, подобные SASS, в конвейере ресурсов, поскольку они компилируются вне конвейера.

Это также кошмар безопасности, поскольку SASS не просто декларативен, как CSS. И это может быть использовано для выполнения кода на вашем сервере.

Что бы вы ни пытались сделать, должно быть более разумное / менее сложное решение.

Другие вопросы по тегам