2011-12-02 37 views
11

Trong Đường ray, nơi tôi nên xác định biến có thể được nhận dạng bởi mỗi lớp ngăn xếp Rails.biến toàn cầu ứng dụng rộng

Ví dụ, tôi muốn có một biến CUSTOMER_NAME='John' mà có thể được truy cập trong helper, cào nhiệm vụ, khiểnmô hình. Tôi nên xác định biến này ở đâu trong ứng dụng Rails?

Tôi đang sử dụng Rails v2.3.2

+0

Điều bạn đang hỏi không phải là biến, mà là hằng số, điều đó có nghĩa là: nó không thể được đặt từ bên trong ứng dụng. Tôi đã bị công cụ tìm kiếm gây hiểu lầm bởi vì thuật ngữ sai được sử dụng ở đây. – Paul

Trả lời

8

Bạn muốn có hằng số thực sự toàn cầu? Sử dụng ::COSTUMER_NAME. Bạn muốn có biến toàn cầu thực sự? Sử dụng $COSTUMER_NAME (không khuyến khích). Bạn muốn biến số toàn cầu yêu cầu? Sử dụng Hash theo phương pháp #env.

+1

Bạn có nghĩa là tạo ra một máy chủ Linux biến toàn cầu rộng? – Mellon

+1

'ENV' và' # env' là hai thứ khác nhau. 'ENV' là hằng số toàn cục đại diện cho môi trường Unix. '# env' là một phương thức điều khiển trả về môi trường rack hiện tại. – Reactormonk

+0

Tôi thực hiện :: TESTABC = 'hola' và cố gắng in từ chế độ xem :: TESTABC và nó không được xác định –

14

Một phương pháp khác là để thiết lập một phím trên đối tượng config trong config/application.rb, như vậy:

MyApp::Application.configure do 
    # ... 
    config.my_key = 'some "global" value' 
end 

Sau đó bạn có thể truy cập my_key từ bất cứ nơi nào trong ứng dụng của bạn chỉ với điều này:

MyApp::Application.config.my_key 

Ngoài ra, Mike Perham đã mô tả một cách tương tự, mặc dù cách tiếp cận toàn diện hơn là in his blog post.

+0

Đó không phải là một hằng số nhưng không thay đổi? Nó có thể được thay đổi trong một ứng dụng trong thời gian chạy không? – Paul

+0

Đó là một biến và có thể thay đổi trong thời gian chạy. –