Tôi có một kiểu có tên là Organization
. Nó được xác định trong app/models/organization.rb
Tê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
?
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
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