Tôi đã tìm thấy một số bài viết giải quyết vấn đề người trợ giúp trong một công cụ không thể truy cập được vào ứng dụng tiêu thụ (cha mẹ). Để đảm bảo chúng tôi là tất cả trên cùng một trang, chúng ta hãy nói rằng chúng ta có điều này:Rails 3.1: Cách tốt hơn để hiển thị trình trợ giúp của động cơ trong ứng dụng khách
module MyEngine
module ImportantHelper
def some_important_helper
...do something important...
end
end
end
Nếu bạn nhìn vào các tài liệu rails engine trong "những người giúp đỡ Isolated động cơ của" người (L293), nó nói:
# Sometimes you may want to isolate engine, but use helpers that are defined for it.
# If you want to share just a few specific helpers you can add them to application's
# helpers in ApplicationController:
#
# class ApplicationController < ActionController::Base
# helper MyEngine::SharedEngineHelper
# end
#
# If you want to include all of the engine's helpers, you can use #helpers method on an engine's
# instance:
#
# class ApplicationController < ActionController::Base
# helper MyEngine::Engine.helpers
# end
Vì vậy, nếu tôi hỏi ai tiêu thụ động cơ của tôi để thêm video này vào application_controller.rb của họ, sau đó họ sẽ nhận được quyền truy cập vào tất cả các phương pháp helper quan trọng của tôi:
class ApplicationController < ActionController::Base
helper MyEngine::ImportantHelper
end
Đây là những gì tôi muốn và tôi t hoạt động, nhưng đó là một loại đau, đặc biệt là nếu, như là trường hợp sử dụng của tôi, tất cả mọi thứ công cụ phơi bày có thể/nên được sử dụng bất cứ nơi nào trong ứng dụng tiêu thụ. Vì vậy, tôi đào xung quanh một chút nhiều hơn và tìm thấy một giải pháp mà đề nghị tôi thực hiện như sau:
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
config.to_prepare do
ApplicationController.helper(ImportantHelper)
end
end
end
Bây giờ đây là chính xác những gì tôi muốn: để thêm tất cả phương pháp ImportantHelper tôi để helper ứng dụng ứng dụng của cha mẹ. Tuy nhiên, nó không hoạt động. Ai có thể giúp tôi tìm ra lý do tại sao giải pháp này tốt hơn không hoạt động?
Tôi đang chạy ruby 1.8.7 với đường ray 3.1.3. Hãy cho tôi biết nếu tôi bỏ lỡ bất kỳ thông tin quan trọng nào về vấn đề này và cảm ơn trước.
Bạn thực sự có thể đơn giản hóa hơn nữa để: helper MyEngine :: ImportantHelper with gửi đi. Tôi đã cập nhật bài đăng của mình. – JDutil
Điều này có thay đổi không? Dường như * tất cả * người giúp đỡ của tôi được tải tự động mà không cần mã ở trên! Đây là công cụ của tôi: https: // github.com/sientia-jmu/iq_menu –
Nó thực sự có vẻ như tất cả những người giúp đỡ được bao gồm tự động cho mọi bộ điều khiển, ít nhất là khi có một động cơ '--full'. –