2015-10-12 17 views
5

Tôi có một kiểu có tên là Organization. Nó được xác định trong app/models/organization.rbTên đường rayĐo lường hằng số không khởi tạo (Va chạm kiểu mẫu và không gian)

class Organization < ActiveRecord::Base 
... code 
end 

Tôi có bộ điều khiển có tên Admin::Organization::ActivitiesController. Nó được xác định trong app/controllers/admin/organization/activities_controller.rb. Nó có một hành động chỉ mục trong đó.

class Admin::Organization::ActivitiesController < ApplicationController 
    def index 
    @organization = Organization.new 
    ... more code 
    end 
end 

tôi nhận được thông báo sau khi tôi thực hiện thao tác chỉ số trên:

NameError in Admin::Organization::ActivitiesController#index 
uninitialized constant Admin::Organization::ActivitiesController::Organization 

Đối với một số lý do nó xác định phạm vi mô hình tổ chức bên trong lớp điều khiển. Nếu tôi thay đổi phương thức index để sử dụng

@organization = ::Organization.new 

thì nó hoạt động tốt.

Hành vi này dường như không xuất hiện trong bảng điều khiển nâng cao. Nếu tôi thêm lệnh gọi binding.pry vào phương pháp chỉ mục, thì tôi có thể gọi Organization.new hoặc ::Organization.new từ dòng lệnh hoạt động tốt.

Mỗi mô hình khác trong ứng dụng hoạt động chính xác và không có hành vi kỳ lạ này. Tôi đã không viết mã ban đầu vì vậy tôi đang cố gắng tìm ra những gì đang xảy ra.

Tôi nghĩ rằng nó có thể có thứ gì đó với không gian tên trong tệp routes.rb. Có một không gian tên sử dụng từ organization.

namespace :admin do 
    namespace :organization 
    resources :activities 
    end 
end 

Là một thử nghiệm, tôi đã thay đổi không gian tên để :organizations, và tôi có thể để có được những điều để làm việc mà không cần ::. Có cách nào để cấu trúc mọi thứ hoặc thiết lập định tuyến, vì vậy chúng tôi có thể có không gian tên là :organization không ảnh hưởng đến mô hình có tên Organization?

+0

Chỉ cần làm rõ, khi bạn nói "vỡ mã", làm bạn có nghĩa là bạn thấy rằng lỗi khi bạn thử và khởi động ứng dụng hoặc khi bạn gọi phương thức 'ActivitiesController # index'? – seddy

+0

Nó ngắt khi hành động 'ActivityController # index' được thực hiện. Tôi đã cập nhật câu hỏi. – CodeSmith

Trả lời

1

Nếu bạn chỉ muốn tạo đường dẫn đúng, bạn không cần đặt bộ điều khiển hoạt động trong thư mục không gian tên admin/organization. Một tùy chọn khác sẽ giống như sử dụng phạm vi thay vì không gian tên.

# app/controllers/activities_controller.rb 
class ActivitiesController < ApplicationController 
    def index 
    @organization = Organization.new 
    ... more code 
    end 
end 

Bây giờ cấu hình tuyến đường,

# config/routes.rb 
scope 'admin/organization', path: 'admin/organization' do 
    resources :activities 
end 

này sẽ tạo ra các tuyến đường như thế này,

Prefix Verb URI Pattern          Controller#Action 

activities GET /admin/organization/activities(.:format)  activities#index 
       POST /admin/organization/activities(.:format)  activities#create 
...... 
Các vấn đề liên quan