2012-05-23 23 views
9

Tôi đang xây dựng một công cụ Rails được gọi là Khắc.Thiếu những người giúp đỡ các tuyến đường phát triển bên trong khung nhìn động cơ ray

Tôi có động cơ gắn kết như vậy:

# Routes.rb of the host app 
mount Engrave::Engine => "/engrave", :as => "engrave_engine" 

Trong động cơ này, tôi có một bộ điều khiển được gọi là "PostsController". Khi tôi hướng đến điều khiển này để xem một bài như vậy: /engrave/posts/1 tôi nhận được lỗi này:

undefined local variable or method `new_user_session_path' 

Các PostsController trong động cơ được kế thừa từ bộ điều khiển động cơ, được kế thừa từ bộ điều khiển ứng dụng, như vậy:

module Engrave 
    class PostsController < ApplicationController 
    ... 
end 

class Engrave::ApplicationController < ApplicationController 
end 

Các new_user_session_path đang được xác định bởi devise, mà tôi đã thiết lập như:

devise_for :users 

Các cuộc gọi đến new_user_session_path nằm trong tệp mẫu layouts/application.html.erb trong ứng dụng máy chủ

Tôi không thể hiểu tại sao trình trợ giúp tuyến đường này không có sẵn trong ngữ cảnh này. Tôi đang làm gì sai?

+0

Tôi đã đánh dấu câu trả lời StrangeDays là chính xác, vì nó sửa chữa vấn đề về mặt kỹ thuật, nhưng nếu có ý tưởng về cách sử dụng động cơ theo cách này mà không yêu cầu sửa đổi tất cả các mẫu bố cục của tôi, điều đó thật tuyệt vời. Tôi chơi xung quanh và quản lý để hoàn thành những gì tôi muốn bằng cách tạo ra một động cơ đầy đủ thay vì một cô lập/mountable. Tôi nghĩ rằng tôi vẫn còn thiếu một cái gì đó, tôi muốn có bánh của tôi và ăn nó quá này. – Jeff

Trả lời

9

Sử dụng

main_app.new_user_session_path

nên hoạt động

6

Tôi đã thành công cách làm như sau trong application_helper.rb ứng dụng chính của:

module ApplicationHelper 
    # Can search for named routes directly in the main app, omitting 
    # the "main_app." prefix 
    def method_missing method, *args, &block 
    if main_app_url_helper?(method) 
     main_app.send(method, *args) 
    else 
     super 
    end 
    end 

    def respond_to?(method) 
    main_app_url_helper?(method) or super 
    end 

private 

    def main_app_url_helper?(method) 
    (method.to_s.end_with?('_path') or method.to_s.end_with?('_url')) and 
     main_app.respond_to?(method) 
    end 
end 

Tôi đã sử dụng điều này trong động cơ gắn kết, vì vậy bạn không phải hy sinh những tính năng này.

0

Làm việc tắt số this response, tôi bao gồm tất cả những người trợ giúp tìm thấy trong application_helpers.rb bằng cách ghi rõ helper "manager/application" bên trong bộ điều khiển (nếu 'người quản lý' là không gian tên hiện tại của công cụ có thể gắn kết của bạn. ứng dụng tiêu chuẩn).

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