Можем ли мы использовать 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. И это может быть использовано для выполнения кода на вашем сервере.
Что бы вы ни пытались сделать, должно быть более разумное / менее сложное решение.