2010-11-21 31 views
13

Tôi đang cố gắng tham khảo Rails.root trong ứng dụng của tôi.rb nhưng nó là không, tại sao vậy?Tại sao Rails.root của tôi là nil?

+0

Rails đã khởi động chưa? – Reactormonk

+0

có, nó tải tốt, nhưng khi nó trả về null, ngay cả trong giao diện điều khiển đường ray. – Blankman

+2

@Blankman: đây là câu hỏi mà bạn có thể chấp nhận. –

Trả lời

1

Bạn đang sử dụng Rails 3.x? Nếu không, bạn nên sử dụng RAILS_ROOT thay vì Rails.root.

+1

Ngay cả 'RAILS_ROOT' là' nil' trong 'application.rb' –

0

Tôi gặp vấn đề tương tự khi tôi cố gắng sử dụng nó trước khi khai báo mô-đun và lớp học. Hãy thử sử dụng nó bên trong và xem điều đó có tạo nên sự khác biệt không, ví dụ:

module MyApp 
    class Application < Rails::Application 

    puts Rails.root 

    end 
end 
8

Tôi có thể giải thích lý do, nhưng tôi không thể giải quyết cho bạn.

Rails.root được định nghĩa trong rails/railties/lib/rails.rb

def root 
    application && application.config.root 
end 

Trong application.rb, trường hợp của application chưa được tạo ra, vì lớp Application đang được định nghĩa ... Ứng dụng này chỉ được khởi tạo sau đó, trong environment.rb:

# Load the rails application 
require File.expand_path('../application', __FILE__) 

# Initialize the rails application 
Testapp::Application.initialize! 

EDIT

Giải pháp thay thế ngay trước mắt chúng tôi:

my_rails_root = File.expand_path('../..', __FILE__) 
Các vấn đề liên quan