2011-11-06 30 views
8

Tôi đang làm việc trên động cơ ray và tôi gặp vấn đề với người trợ giúp.Người trợ giúp trong công cụ Rails

Rõ ràng đây là một "sự cố" đã biết nhưng không có nhiều giải pháp ngoài đó. Vấn đề là tôi có một AuthenticationHelper mà tôi muốn truy cập trên toàn cầu - nhưng nó không hoạt động.

Tôi đã read that you could add a few lines to your init.rb nhưng dường như không có bất kỳ ảnh hưởng nào.

Bất kỳ ý tưởng nào là cách tốt nhất để tạo ứng dụng có sẵn trong một công cụ?

EDIT: Đã sửa lỗi - Chỉ cần đặt mã (từ liên kết) trong số engine.rb thay thế.

+1

bạn có thể cung cấp một ví dụ về mã bạn đặt trong engine.rb? – westonplatter

Trả lời

10

Đặt mã này trong engine.rb:

config.to_prepare do 
    ApplicationController.helper(MyEngineHelper) 
end 
+0

bên trong lớp Engine linjunhalida

+1

Đối với hậu thế: điều này không còn cần thiết - đường ray bây giờ tự động tải tất cả những người trợ giúp – danielpcox

+3

Chạy đường ray 3.2.12 ... Đã thêm phương thức này vào phương thức truy cập trong ApplicationHelper – Patm

2

Để truy cập vào những người giúp đỡ ứng dụng chính (ApplicationHelper) từ quan điểm động cơ của tôi đã cố gắng này bao gồm:

app/giúp đỡ/your_engine/application_helper.rb

module YourEngine 
    module ApplicationHelper 
    include ActionView::Helpers::ApplicationHelper 
    end 
end 

Nó hoạt động, nhưng một lần, khi tôi khởi động lại máy chủ dev, nó ném tôi uninitialized constant ActionView::Helpers::ApplicationHelper, nhưng tôi không thể tái tạo ngoại lệ này.

EDIT

Removed include này và thực hiện điều này một:

lib/my_engine/engine.rb (động cơ bên trong của nó)

module MyEngine 
    class Engine < ::Rails::Engine 
    isolate_namespace MyEngine 
    config.to_prepare do 
     ApplicationController.helper(ActionView::Helpers::ApplicationHelper) 
    end 
    end 
end 
+1

Tôi đã phải thay đổi dòng .helper trong Rails 4.2 này: ApplicationController.helper (:: ApplicationHelper) ... Điều đó thậm chí có thể đã làm việc với giải pháp đầu tiên của bạn. – Allen

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