2010-08-30 34 views
24

tôi sử dụng để đặt các biến toàn cầu trong environment.rb với Rails của tôi 2.3.8 ứng dụng như:Nơi để đặt các biến toàn cầu trong Rails 3

MAX_ALLOWD_ITEMS = 6 

Nó dường như không làm việc trong Rails 3. Tôi đã thử đặt nó vào application.rb và điều đó không giúp được gì.

Bạn đề xuất điều gì?

+0

Điều bạn đang hỏi không phải là biến, mà là một 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

46

Nếu bạn đã thử khởi động lại máy chủ của bạn như Ryan gợi ý, hãy thử đặt nó trong application.rb của bạn như thế này:

module MyAppName 
    class Application < Rails::Application 
    YOUR_GLOBAL_VAR = "test" 
    end 
end 

Sau đó, bạn có thể gọi nó với không gian tên trong bộ điều khiển, quan điểm của bạn hoặc bất cứ nơi nào ..

MyAppName::Application::YOUR_GLOBAL_VAR 

Một giải pháp thay thế khác sẽ sử dụng một cái gì đó như settingslogic. Với settingslogic, bạn chỉ cần tạo một tệp cấu hình yml và một mô hình (Settings.rb) trỏ đến tệp cấu hình. Sau đó, bạn có thể truy cập các thiết lập này bất cứ nơi nào trong ứng dụng ray của bạn với:

Settings.my_setting 
+3

Tôi đã tạo một plugin lấy cảm hứng từ settingslogic, nhưng nó không yêu cầu bạn tạo một lớp cho các thiết lập. Bạn chỉ phải bao gồm tệp yml và lớp được tạo động khi máy chủ khởi động. Đây là repo: https: // github.com/cowboycoded/yettings – johnmcaliley

+2

Nó không phải là biến, nhưng một hằng số, có nghĩa là: nó không thể được thiết lập 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

+0

Điều này hoạt động trên đường ray 4 ??? –

2

Nếu bạn đang thực sự xác định nó trong config/environment.rb như bạn nói, cách duy nhất tôi có thể lặp lại vấn đề của bạn là bằng cách chạy lên một máy chủ sử dụng rails server, sau đó đưa vào các biến để config/environment.rb, tham chiếu nó trong chế độ xem hoặc bộ điều khiển ở đâu đó và sau đó cố gắng tải phần cụ thể đó của ứng dụng của tôi.

Nếu tôi dừng máy chủ và khởi động lại, hãy thử truy cập chế độ xem hoặc bộ điều khiển đó sau đó nó hoạt động. Tôi nghĩ bạn vừa không khởi động lại máy chủ của bạn.

0

Tôi không biết nếu giải pháp của việc thêm các biến để environment.rb sẽ trong công việc thực tế trong Rails3 - được cụ thể, nếu bạn thiên đường' t đã xác định biến bên trong định nghĩa mô-đun như vậy:

module MyConfig 
    Max_ints = 5 
end 

bạn sẽ không thể chỉ sử dụng Max_ints nếu bạn chỉ đưa nó vào định nghĩa trống. Hoặc ít nhất đó là những gì tôi thấy đã xảy ra khi tôi thử nghiệm với điều này. Tôi cũng nghĩ rằng gợi ý để sử dụng initializers/thư mục có thể là một giải pháp tốt hơn về dễ sử dụng. Xem Permanent variable in Rails

1

Tôi thường tạo bên trong tệp config/initializers/yaml (yml) với tất cả cài đặt trang web chung. hãy nhớ khởi động lại máy chủ mỗi khi bạn thay đổi bất kỳ thứ gì.

7

Tôi thường đi với application_helper.rb Đây là những gì nó trông giống như:

module ApplicationHelper 
    def my_global_variable 
    my_global_variable = "Helloworld!"  
    end 
end 

Sau đó, tôi có thể đưa vào bất cứ nơi nào my_global_variable như một hàm.

Các vấn đề liên quan