2009-05-24 26 views
10

Tôi mới đến đường ray và không thể tìm ra vấn đề này ...Ruby on Rails mô hình bên trong namespace không thể được tìm thấy trong bộ điều khiển

Tôi có một bộ điều khiển

Admin::Blog::EntriesController 

quy định tại app/controllers/admin/blog/entries_controller.rb

Và tôi có một mô hình gọi là

Blog::Entry 

defin ed trong app/mô hình/blog/entry.rb

Khi tôi cố gắng truy cập vào mô hình của tôi từ bộ điều khiển, tôi nhận được một "uninitialized constant Admin::Blog::EntriesController::Blog" từ dòng này:

@blog_entries = Blog::Entry.find(:all) 

Rõ ràng nó không phải là tìm không gian tên một cách chính xác mà là lẻ bởi vì theo những gì tôi đã đọc, tôi đã đặt mô hình của tôi vào đúng thư mục với cú pháp chính xác.

Bất kỳ ý tưởng nào về cách khắc phục sự cố này?

Cảm ơn

Trả lời

27

Hãy thử:

@blog_entries = ::Blog::Entry.find(:all) 

Nó hiện đang tìm kiếm cho lớp sai. Sử dụng :: trước Blog sẽ buộc nó phải nhìn từ cấp cao nhất.

+0

Ah, cảm ơn, điều đó đã hiệu quả. Tuy nhiên, nó chỉ ra rằng tôi phải thiết lập một tên bảng tùy chỉnh cho mô hình của tôi là tốt. Ngoài ra, form_for helper dosn't làm việc vì nó sử dụng " _path" điều cho thuộc tính action mà tôi nghĩ, vì vậy nó ném một lỗi mà nó không thể tìm thấy phương thức "blog_entries_path" ... Bất kỳ ý tưởng nào? – nlaq

+0

Tôi bắt đầu nghĩ rằng đường ray cau mày khi nhiều không gian tên cho các mô hình và bộ điều khiển ... Thật đáng tiếc vì tôi thực sự thích cấu trúc đường dẫn

//. – nlaq

+0

quy ước đường ray là các tên mẫu là số ít trong khi các bộ điều khiển là số nhiều.Có thể đổi tên bộ điều khiển Quản trị viên :: Blogs :: EntriesController (vâng, có vẻ lạ) Có lẽ bạn cũng nên suy nghĩ lại bằng cách sử dụng các mô hình không gian tên, có lẽ họ gặp nhiều rắc rối hơn chúng đáng xem, xem http://stackoverflow.com/questions/601768/namespaced-models-in-rails-whats-the-nhà nước-of-the-union – levinalex

1

Bạn có thể đạt được một tên bảng tùy chỉnh bằng cách sử dụng

set_table_name('foo') 

ở phía trên cùng của mô hình của bạn.

Đối với nhiều không gian tên, bạn có thể có thể nhận được ngay với sử dụng

polymorphic_path(@the_object) 

để tạo ra các url của bạn vì nó làm suy luận cơ bản hơn (theo kinh nghiệm của tôi ít nhất, có lẽ form_for sử dụng nó dưới mui xe) .

0

Vâng, nhìn vào mã form_for sử dụng polymorphic_path dưới mui xe.

3

Bây giờ là năm 2011 và chúng tôi đang ở trong lãnh thổ Rails 3.1, nhưng vấn đề này vẫn phát sinh. Tôi chỉ chạy vào nó với một bộ điều khiển không gian tên tham chiếu một mô hình không có tên, nhưng chỉ khi không có hàng cho mô hình đó trong cơ sở dữ liệu!

Tiền tố tên mẫu bằng cách :: khắc phục sự cố.

+0

Đã chạy vào này với một số xét nghiệm trong Rails 4. Tạo một vật cố định yml trống cho mô hình cố định nó, nhưng vấn đề cơ bản là thực sự * có một không gian tên trùng tên với mô hình *. – Sooie

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