2009-03-11 4 views
8

레일 2.3 템플릿을 사용하고 있는데 내 응용 프로그램 이름을 내 템플릿의 변수로 사용할 수 있기를 원할 때 사용합니다.
rails appname -m path/to/template.rb
... template.rb 안에 appname에 액세스 할 수 있기를 원합니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?
감사합니다.레일 응용 프로그램을 생성 할 때 레일 템플릿 내부에서 응용 프로그램 이름에 액세스

답변

8

답변 해 주셔서 감사합니다. 마이크 우드 하우스, 너 너무 가까웠다. 당신이 당신의 레일 템플릿이 내부에서 APPNAME에 액세스하기 위해 필요한 모든 ...

@root.split('/').last 

@root 변수가 템플릿을 초기화 할 때 만든 첫 번째 일이 당신의 레일 템플릿 안에 사용할 밝혀졌습니다. RAILS_ROOT가 작동하지 않습니다.

1

RAILS_ROOT은 (는) 루트 디렉토리의 절대 경로를 제공합니다. 앱 이름은 최종 '/'다음에 문자열의 일부가되며 원하는 방식으로 가져올 수 있습니다.

편집 : 작업을 완료하기에 충분하지 않습니다. Mike와 Dan은 그것을 아래에서 철저히 다듬습니다.

3

아마 더 간단한 방법이있다, 그러나이 작동하는 것 같다 :

RAILS_ROOT.split('/').last 

편집 : Bleah이 -이 한 번 부결되었다, 그리고 유권자가 옳았다. 질문을 더 자세히 읽으려면 2.3 및 template.rb 요소가 있음을 눈치 챘을 것입니다. 사과.

응용 프로그램 이름이 필요한 시점에서 RAILS_ROOT가 생성되지 않았을 것으로 생각됩니다. - 나는 채소 수 몰랐

app_path = ARGV.first 

이 CHDIR 및 동결을 허용하는 스크립트의 끝 부분에 사용되는이 필요한 경우 수행해야 할 : ruby\lib\ruby\gems\1.8\gems\rails-2.2.2\bin\rails 보면, 그러나, 일이 거의 첫 번째 일은 이것이다 창조 할 때부터, 그래서 적어도 새로운 것을 배웠습니다. ARGV는 여기에 사용됩니다 : 빨리 ARGV 정말 처리하는 곳으로 우리를 얻을 수

Rails::Generator::Scripts::Generate.new.run(ARGV, :generator => 'app') 

을 : 나는 아래 여기

Rails::Generator::Base.instance(options[:generator], args, options).command(options[:command]).invoke! 

어딘가를 참조

rails-2.3.1\lib\rails_generator\scripts.rb 

아마 어디있다 템플릿 처리가 처리됩니다. 나는 2.3의 초기 단계에 있으며 템플리트는 아직 보지 못했던 영역이라는 것을 알고 있습니다.

내 첫 노력보다 도움이 되나요?

0

이제 Rails.root를 호출하고 더 이상 RAILS_ROOT를 호출하지 않는 것이 좋습니다. 명백하게 행성 난간에있는 누군가는 대문자 또는 비슷한 비슷한 중요한 이유에 대한 혐오감을 가지고 있습니다. 2.3.5부터 그들은 둘 다 작동하는 것처럼 보입니다.

15

이 질문에 대한 답변을 찾고 계십니다. 불행히도 위의 대답 (@root)은 Rails 3에서 작동하지 않는 것 같습니다.

다음은 레일에 (더 쉽게) 3 응용 프로그램 템플릿에 액세스 할 수있는 변수는 다음과 같습니다

@app_name 
@app_path 
5

레일 3에서 app_name 속성을 사용합니다.

Rails::Generators::AppGenerator에 대한 설명서를 참조하십시오.

class DynanavGenerator < Rails::Generators::Base 

(수

0

나는 레일 2.3 발전기, 토르 0.18.0, 루비 1.9.2p290

`template': undefined local variable or method `app_name' 

오류

윈도우

를 3.2.11 레일지고 있지만되었다 이 오류가 레일 3.0.9 이하에서 발생했는지 확인하십시오) 클래스 정의를 다음과 같이 변경했습니다.

다음 준 공
class DynanavGenerator < Rails::Generators::NamedBase 

:

그때 (이하 "뭔가")는 '이름'을 추가

필수 인수 '이름'을 위해 제공 값 없음 :

rails generate dynanav something --force 

원래 오류가 발생 했으므로 다음을 추가했습니다.

def app_name 
    @name.titleize 
end 
클래스에

그리고 모두 잘되었습니다. 사용할 수있는 다른 유용한 변수는 템플릿 내에서있다

rails plugin new engines/dummy -m my_template.rb 

을 실행하는 동안 나는 비슷한 문제로 실행

3

는 위에 나열된 변수 중 어느 것도 @name을 사용할 것을 내가 찾은 레일 4에 나에게 사용할 수 없었다 . pry을 이용하면 스스로 볼 수 있고 놀 수 있습니다. 내 템플릿 내부 내가

require 'pry'; binding.pry 

을 추가하고

ls -i 
instance variables: 
    @_initializer   @app_path @behavior @destination_stack @extra_entries @name   @output_buffer @shell 
    @_invocations   @args  @builder @dummy_path   @gem_filter  @options  @rails_template @source_paths 
    @after_bundle_callbacks @author @camelized @email    @in_group  @original_name @shebang 
+0

이 답변 시간을 증명 가능한 인스턴스 변수의 목록을 보여 ls를 실행, 상단 하나 여야합니다 –

관련 문제