[RUBY-ON-RAILS] 변수를 사용 YAML
RUBY-ON-RAILS변수를 사용 YAML
YAML 파일 내 변수는 수 있는가? 예를 들면 :
theme:
name: default
css_path: compiled/themes/$theme.name
layout_path: themes/$theme.name
이 예에서, 어떻게 테마 : 이름 : 기본값은 다른 설정에 사용? 구문은 무엇입니까?
해결법
-
==============================
1.나는이 같은 질문을했다, 그것은 불가능처럼 많은 연구 후에, 그것은 보인다.
나는이 같은 질문을했다, 그것은 불가능처럼 많은 연구 후에, 그것은 보인다.
cgat에서 대답은 바른 길에,하지만 당신은 그런 사실 합칠 수없는 참조를 할 수 있습니다.
여기에 (공식적으로 당신이 그들을 설정할 때 "노드 앵커"라고하며 "참조"당신이 나중에 사용할 때하는) 당신이 YAML에서 "변수"로 할 수있는 작업은 다음과 같습니다
default: &default_title This Post Has No Title title: *default_title
{또는}
example_post: &example title: My mom likes roosters body: Seriously, she does. And I don't know when it started. date: 8/18/2012 first_post: *example second_post: title: whatever, etc.
더 많은 정보를 원하시면, YAML에 대한 위키 페이지의이 섹션을 참조하십시오 : http://en.wikipedia.org/wiki/YAML#References
default: &DEFAULT URL: stooges.com throw_pies?: true stooges: &stooge_list larry: first_stooge moe: second_stooge curly: third_stooge development: <<: *DEFAULT URL: stooges.local stooges: shemp: fourth_stooge test: <<: *DEFAULT URL: test.stooges.qa stooges: <<: *stooge_list shemp: fourth_stooge
이 여기에 큰 데모에서 직접 가져온 것입니다 https://gist.github.com/bowsersenior/979804
-
==============================
2.일부 검색 후, 나는 % 연산자를 사용 느릅 나무 깨끗한 솔루션을 찾았습니다.
일부 검색 후, 나는 % 연산자를 사용 느릅 나무 깨끗한 솔루션을 찾았습니다.
당신의 YAML 파일에서 :
key : 'This is the foobar var : %{foobar}'
당신의 루비 코드에서 :
require 'yaml' file = YAML.load_file('your_file.yml') foobar = 'Hello World !' content = file['key'] modified_content = content % { :foobar => foobar } puts modified_content
그리고 출력은 다음과 같습니다
This is the foobar var : Hello World !
@jschorr이 코멘트에 말했듯이, 당신은 또한 YAML 파일의 값에 여러 변수를 추가 할 수 있습니다 :
YAML :
key : 'The foo var is %{foo} and the bar var is %{bar} !'
루비 :
# ... foo = 'FOO' bar = 'BAR' # ... modified_content = content % { :foo => foo, :bar => bar }
출력 :
The foo var is FOO and the bar var is BAR !
-
==============================
3.이것은 이전 게시물입니다,하지만 난 비슷한 요구를했고 이것이 내가 생각 해낸 솔루션입니다. 그것은 해킹의 비트이지만, 작업 및 정제 할 수있다.
이것은 이전 게시물입니다,하지만 난 비슷한 요구를했고 이것이 내가 생각 해낸 솔루션입니다. 그것은 해킹의 비트이지만, 작업 및 정제 할 수있다.
require 'erb' require 'yaml' doc = <<-EOF theme: name: default css_path: compiled/themes/<%= data['theme']['name'] %> layout_path: themes/<%= data['theme']['name'] %> image_path: <%= data['theme']['css_path'] %>/images recursive_path: <%= data['theme']['image_path'] %>/plus/one/more EOF data = YAML::load("---" + doc) template = ERB.new(data.to_yaml); str = template.result(binding) while /<%=.*%>/.match(str) != nil str = ERB.new(str).result(binding) end puts str
큰 단점은 변수 명 (이 경우, "데이터") 또는 존재하지 않을 수도 YAML 문서로 구축이다. 아마도 더 나은 솔루션은 $를 사용하고 ERB에 앞서 루비에서 변수의 이름으로 대체하는 것입니다. 또한, 단지 눈에 훨씬 더 쉽게 data.theme.name 유형의 표기법을 허용 hashes2ostruct를 사용하여 테스트. 필요한 모든 것은이 함께 YAML :: 부하를 래핑하는 것입니다
data = hashes2ostruct(YAML::load("---" + doc))
그런 다음 YAML 문서는 다음과 같이 할 수 있습니다
doc = <<-EOF theme: name: default css_path: compiled/themes/<%= data.theme.name %> layout_path: themes/<%= data.theme.name %> image_path: <%= data.theme.css_path %>/images recursive_path: <%= data.theme.image_path %>/plus/one/more EOF
-
==============================
4.레일 / 루비 프레임 워크는 자주 부하 ENV 변수에 사용되는 ... 일부 템플릿을 할 수 있습니다 ...
레일 / 루비 프레임 워크는 자주 부하 ENV 변수에 사용되는 ... 일부 템플릿을 할 수 있습니다 ...
# fooz.yml foo: bar: <%= $ENV[:some_var] %>
자바 스크립트 프레임 워크에 대해이 작품은 내가 YML 형식은 JSON의 상위 집합이라고 생각하는 그것이 당신을 위해 YML 파일을 읽고 무엇에 의존하는 경우 아무 생각이 없습니다.
당신이 나 같은 템플릿을 사용할 수있는 경우 << >> 또는 그 직후 독자에 따라 {{}} 스타일, ...
또 다른 YML 파일 ...
# boo.yml development: fooz: foo
당신은 기본적으로 참조로 변수를 삽입 할 수있는 원래의 파일을 동적으로 설정 될 때마다. 읽을 때 나는 또한 당신이 만들 수 있습니다보고하거나 파일 및 체인 쓰기를 YML 파일의 시리즈를 만들거나 그냥 모든 정적 동적으로 생성 한 가리키는 가질 수 있도록 여러 언어에 대한 즉시 객체와 같은 오픈 YML 파일했다.
from https://stackoverflow.com/questions/4150782/use-yaml-with-variables by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 컨트롤러에서 실행 레이크 작업 (0) | 2020.02.13 |
---|---|
[RUBY-ON-RAILS] 어떻게 레일에서 기본값을 설정하는 방법? (0) | 2020.02.13 |
[RUBY-ON-RAILS] 어떻게 레일에서 다른 형식의 부분을 렌더링합니까? (0) | 2020.02.13 |
[RUBY-ON-RAILS] 이유에 대해 종종 추천 default_scope 레일을 사용? (0) | 2020.02.13 |
[RUBY-ON-RAILS] 데이터베이스에 배열을 저장 : 직렬화 된 배열 대 JSON (0) | 2020.02.13 |