2013-06-17 30 views
6

Tôi gặp sự cố với tên mô-đun và cấu trúc thư mục.Rails Module/Quy ước đặt tên thư mục

Tôi có một mô hình định nghĩa là

module API 
    module RESTv2 
    class User 
    end 
    end 
end 

Cấu trúc thư mục trông giống như

models/api/restv2/user.rb 

Khi cố gắng để truy cập vào lớp, tôi nhận được một lỗi liên tục chưa được khởi tạo. Tuy nhiên, nếu tôi thay đổi tên module thành REST và thư mục thành/rest, tôi sẽ không gặp lỗi.

Tôi giả sử các vấn đề đã làm với việc đặt tên của thư mục, và tôi đã thử tất cả combo khác nhau/rest_v_2,/rest_v2,/restv_2 vv

Bất kỳ lời đề nghị?

+3

Theo quy ước Rails, bạn đã đặt tên mô-đun là không đúng.' RESTv2' phải là 'RestV2' – meagar

Trả lời

7

Rails uses phương pháp 'gạch dưới' trên tên mô-đun hoặc lớp học để thử và tìm ra tệp cần tải khi gặp phải một hằng số mà nó chưa biết. Khi bạn chạy mô-đun của bạn thông qua phương pháp này, nó dường như không cho kết quả trực quan nhất:

irb(main):001:0> "RESTv2".underscore 
=> "res_tv2" 

Tôi không chắc chắn lý do tại sao gạch làm cho sự lựa chọn này, nhưng tôi đặt cược đổi tên dir mô-đun của bạn vào sẽ ở trên khắc phục sự cố của bạn (mặc dù tôi nghĩ tôi muốn đổi tên nó thành "RestV2 hoặc RESTV2 để tên thư mục là sane).

+7

Điều này thực sự có ý nghĩa hoàn hảo, đó là chuỗi 'RESTv2' không tuân theo quy ước Giả sử rằng từ đầu tiên là một loại từ viết tắt như" PIN ", và từ thứ hai là một từ viết hoa như" Nhập khẩu " : 'PINImporter' =>' pin_importer', 'UUIDGenerat hoặc '=>' uuid_generator', 'AESCracker' =>' aes_cracker', 'RESTv2' =>' res_tv2', v.v. Trong mọi trường hợp chuyển đổi CamelCase, không phải là "CamelC ase", nó là "Camel Case". Không gian được tiêm * trước * chữ hoa cuối cùng, không phải sau. – meagar

+0

Tôi nghi ngờ trường hợp "v" là nguyên nhân gây ra từ vỡ trước chữ "T". –

+0

Cảm ơn sự giúp đỡ. – KPheasey

5

Bạn sẽ cần phải định cấu hình Rails để tự động tải trong thư mục con của thư mục ứng dụng/mô hình. Đặt điều này trong config/application.rb:

config.autoload_paths += Dir["#{config.root}/app/models/**/"] 

Sau đó, bạn sẽ có thể tự động tải những tệp đó.

Ngoài ra, tên tệp có khả năng của bạn sẽ phải là app/model/api/res_tv2/user.rb, vì Rails sử dụng String.underscore để xác định tên tệp. Tôi chỉ gọi nó là API :: V2 :: Người dùng để tránh đau đầu, trừ khi bạn có nhiều hơn một loại API.