2013-08-15 19 views
9

Tôi có hai đá quý "CoreGem" và "AddonGem". Addon Gem bổ sung thêm chức năng mà sẽ ghi đè lên đá quý cốt lõi.Làm thế nào để thay đổi thứ tự đá quý được nạp từ bên trong một trong những viên đá quý

Làm cách nào để đảm bảo rằng nếu viên đá quý thứ hai được thêm vào, nó sẽ ghi đè lên lượt xem và nội dung của trang đầu tiên.

Cho đến nay nó hoạt động khi thêm vào các ứng dụng chính:

config.railties_order = [ :main_app, AddonGem::Engine, :all] 

Nhưng tôi muốn làm điều này từ bên trong AddonGem.

Cảm ơn

+1

Tôi chưa bao giờ nghe nói về cách sắp xếp lại thứ tự tải tệp. Nhưng ai biết được ... – phoet

+1

chỉ cần nghĩ về một cái gì đó, bất cứ ai biết nếu làm cho CoreGem một sự phụ thuộc của AddonGem sẽ thay đổi thứ tự? – montrealmike

Trả lời

1

đâu railties_order được sử dụng

railties_order được sử dụng ở đây:

để xác định thứ tự của initializer khối để chạy,

https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L337

tìm thấy trong các loại đá quý khác.

https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L47

Vì vậy, việc thiết railties_order bên trong một khối initializer sẽ là khá vô nghĩa, như vào thời điểm khối initializer được gọi, railties_order đã được thiết lập và đang được sử dụng bởi phần còn lại của ứng dụng.

gì bạn có thể làm thay

Rõ ràng một bó hơn initializer khối là bên trong Rails::Application::Bootstrap.

https://github.com/rails/rails/blob/master/railties/lib/rails/application/bootstrap.rb

Những được thêm vào phía trước trước khi khối khởi tạo các ứng dụng chính của:

https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb#L262

Vì vậy, có lẽ bạn có thể khỉ vá module Bootstrap với một số initializers? Tôi đoán đó là cuộc gọi của bạn.

+0

Mmmm .. đen ma thuật: P –

-1

Thực hiện một máy phát điện trong AddonGem rằng tiêm nhiễm đoạn code này

config.railties_order = [ :main_app, AddonGem::Engine, :all] 

trong ứng dụng chính, giống như một lệnh addongem:install.

Chỉ để hoàn thành, mặc dù đây là cách dễ dàng. Nó sẽ có thể móc addon sau lõi ở đâu đó.

+0

đây không phải là một lựa chọn tốt vì nó có thể phá vỡ ứng dụng đó hoặc đá quý khác (có cùng một vấn đề). Tôi thực sự muốn chỉ thay đổi thứ tự của đá quý của tôi – montrealmike

+0

có lẽ không: P –

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