2012-09-20 26 views
11

Tôi muốn tạo ra một mô hình trong đường ray:Override Rails điều khiển định tuyến với chữ in hoa trong tên model

rails generate model ABCThing 

Vì vậy, đây sẽ tạo ra một bảng, abc_things. Tuyệt quá. Vấn đề đi kèm với bộ điều khiển và định tuyến. Tôi muốn điều khiển của tôi là:

class ABCThingsController < ApplicationController 
end 

Tuy nhiên, sau khi thêm trong routes.rb

resources :abc_things, :only => [:index] 

và tạo index xem tương ứng, tôi nhận được lỗi sau trong trình duyệt:

Expected /app/controllers/abc_things_controller.rb to define AbcThingsController 

Sự cố rất dễ thấy ("ABCThings".tableize.classify => "AbcThing"), nhưng tôi không chắc chắn cách khắc phục sự cố. Tôi muốn ghi đè lên đường ray định tuyến mặc định từ xem để điều khiển, nhưng tôi không chắc chắn như thế nào.

Sẽ đánh giá cao bất kỳ sự giúp đỡ (và đề xuất cho một tiêu đề câu hỏi tốt hơn!)

+1

Tôi có thể hỏi bạn tại sao trên trái đất sẽ bạn muốn làm điều đó? Công ước là một trong những thế mạnh của RoR, tại sao lại phá vỡ chúng? Tên mô hình BTW không được số nhiều. – cthulhu

+0

Số nhiều trong thế hệ mô hình là lỗi đánh máy, nhưng chắc chắn bạn có thể đánh giá cao vô số chữ viết tắt mà chỉ viết hoa chữ cái đầu tiên của từ viết tắt thực sự không có nhiều ý nghĩa ngữ pháp – rwb

+3

@cthulhu với cùng lý do Rails hỗ trợ uốn cong. Chúng được cho là * quy ước *, không phải luật pháp. – mahemoff

Trả lời

12

Tôi có vấn đề này và sau khi thử tất cả các giải pháp nêu trên; đã có thể khắc phục vấn đề của tôi bằng cách sử dụng inflector.

Trong trường hợp của tôi vấn đề này đã được rằng TLA::ThingsController đã được giải quyết như TlaThingsController

đặt sau trong initializers tôi folder cố định nó

config/initializers/inflections.rb

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.acronym 'TLA' 
end 
+1

Đây là cách Rails và nên được upvoted. Cảm ơn – rwb

-1

Khi bạn chạy lệnh

rails generate model ABCThings 

Nó sẽ tạo ra mô hình và không phải là một bộ điều khiển. Nếu bạn muốn cả hai mô hình và điều khiển sử dụng sau

rails generate scaffold ABCThings 

Tôi nghĩ rằng bạn đang không tạo điều khiển bằng cách sử dụng đường ray chỉ huy và do đó vấn đề đã xảy ra để tạo ra sử dụng bộ điều khiển lệnh sau

rails generate controller ABCThings 

và bạn có thể /app/controllers/abc_things_controller.rb như sau

class AbcThingsController < ApplicationController 
end 
+0

Huh? Tôi đã tạo bộ điều khiển theo cách thủ công. Tôi muốn có 'lớp ABCThingsController rwb

2

Bạn nên đặt tên bộ điều khiển tùy chỉnh, trong tuyến đường s.rb:

resources :abc_things, :only => [:index], :controller => "ABCThings" 
+0

Thông báo lỗi tương tự. Tôi cũng nghĩ rằng bạn có nghĩa là ': controller =>" ABCThings "' – rwb

+0

oh, xin lỗi, yep chỉ tên mà không có phần 'Controller', chỉnh sửa bây giờ – byterussian

+2

Điều này sẽ tạo ra một cảnh báo ngay bây giờ, theo [Rails Guides] (http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use): "Chỉ ký hiệu thư mục được hỗ trợ. Chỉ định bộ điều khiển với ký hiệu hằng số ruby ​​(ví dụ:.: controller => 'Admin :: UserPermissions '') có thể dẫn đến các vấn đề định tuyến và dẫn đến cảnh báo." –

2

Điều này có thể đã thay đổi với Ruby tại một số điểm, nhưng để đặt tên lớp học với nhiều mũ liên tiếp (từ viết tắt hoặc viết tắt), bạn không còn cần phải bao gồm dấu gạch chân trong tên tập tin.

# abc_thing.rb 

có thể chứa

class ABCThing 

    def hello 
    puts "Hello World" 
    end 

end 

hoặc

class AbcThing 

    def hello 
    puts "Hello World" 
    end 

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