2012-03-06 4 views
1

레일즈 3.1 앱을 개발 중이며 css를 동적으로 컴파일하기위한 솔루션이 필요합니다. 내 응용 프로그램에서 사용자가 색상을 설정할 수 있도록 허용하고 모든 색상을 제어하는 ​​하나의 SCSS 파일에서 "라이브 컴파일"을 조건부로 사용하려는 경우 다른 모든 SCSS 파일을 여전히 사전 컴파일해야합니다. ... 것이며 진행하는 방법에 대한 난처한 상황에 빠진 어떤 제안이 도움이 될 것입니다 사전에RAILS 3.1의 CSS의 조건부 라이브 컴파일

감사 FOU 아이디어의 모든

데빈

추신 - 나는 또한 내가 SCSS에서 인스턴스 변수를 사용할 필요가 있음을 언급해야한다

답변

1

ERb로 Sass 파일을 사전 처리 할 수 ​​있습니다. 그러면 인스턴스를 사용할 수 있습니다. 변수는 컨트롤러 또는보기에서 .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; 
} 

는 적응.

+0

끝내 주셔서 감사합니다. – MrDevin

+0

안녕하세요. 문제가 없다면 [대답 수락] (http://stackoverflow.com/faq#howtoask)을 확인하십시오. – Brandan

+0

제 컨트롤러에서 scss를 렌더링하기 위해'render : text => Sass :: Engine.new (render_to_string, syntax : : scss) .render'가 필요했습니다. 다른 현명한 대답, 감사합니다. – MrDevin