컨트롤러 이름과 동작 이름으로 SCSS 호출

3134 단어 scss루비Rails
예를 들어 WelcomeController 의 index 액션이 불려 갔을 경우, 디폴트 상태라고 뷰에는 welcome.css(.scss) 가 로드 되지만, 이것을 부를지 어떨지에 대해서, 파일의 유무라든지 controller 의 변수로 판정 할 수 있으면 좋겠다는 이야기.

여러가지 방법은 있을까 생각합니다만, 이하와 같이 해 보았습니다.

assets/stylesheets/application.css

=require_self
* = require_directory.
디폴트라면 require_tree . 로 되어 있는 개소를 require_directory . 로 한다. 이렇게 하면 루트 디렉토리( assets/stylsheets/)의 css 밖에 자동으로 가져오지 않게 한다.

그런 다음 스타일 시트 디렉토리도 다음과 같이 views처럼 보입니다.

f ltcmdr927:20121209105229p:plain

HEAD 태그는 application.html.erb 로 편집하고 있으므로, 거기를 수정한다.

views/layouts/shared/application.html.erb

<%= stylesheet_link_tag "application", :media => "all"%>
<%= partial_stylesheet_link_tag controller.controller_name, controller.action_name, @partial_css_disabled %>
<%= javascript_include_tag "application"%>
stylesheet_link_tag 와 javascript_include_tag 사이에 새로운 helper 메소드를 추가한다. 인수로 뷰를 읽었을 때의 컨트롤러명과 액션명을 지정. @partial_css_disabled 는 후술.

app/helpers/application_helper.rb

module ApplicationHelper

def partial_stylesheet_link_tag(controller_name, action_name, disabled = true)
if disabled == false || disabled.nil?
if File.exist?("#{Rails.root.to_s}/app/assets/stylesheets/#{controller_name}/#{action_name}.css.scss")
return stylesheet_link_tag "#{controller_name}/#{action_name}"





partial_stylesheet_link_tag 메소드를 작성한다. disabled 가 false 혹은 nil 인가를 판정해, 정의이면 scss 파일의 유무를 판정해, 결국 컨트롤러/액션의 stylesheet_link_tag 를 돌려준다, 라고 하는 느낌.

기본적으로는 파일의 유무로 stylesheet 태그가 추가될지 어떨지를 판정하게 되므로, 예를 들어 파일은 존재하지만 태그는 추가하고 싶지 않다고 하는 경우는, 아래와 같이 controller 로 @partial_css_disabled 변수 에 true 를 지정해 준다. true 를 지정하면 파일이 존재해도 태그가 추가되지 않는다.

app/controller/welcome_controller.rb

class WelcomeController < ApplicationController

def index
@partial_css_disabled=true



약간 이모 같은 느낌이 들지 않아도 되지만, 개인적으로는 이것으로 관리하기 쉬워졌습니다. (컨트롤러의 계층 구조가 깊어진 경우에 대해서는 조사하고 나중에 추기 예정.)

좋은 웹페이지 즐겨찾기