Tên bộ điều khiển và trợ giúp số ít hoặc số nhiều trong Rails


112

Có bất kỳ bất lợi nào khi sử dụng tên số ít cho bộ điều khiển và bộ trợ giúp không? Không có gì dường như dựa vào điều này. Thậm chí có vẻ như những người trợ giúp không phải lựa chọn giống nhau về số ít và số nhiều như bộ điều khiển tương ứng của họ, ít nhất là theo thử nghiệm hạn chế của tôi. Có đúng như vậy không?


2
Tôi đã có cùng một tình huống khó xử khi cố gắng quyết định tên bộ điều khiển số ít hay số nhiều!
Andrew

15
cảm ơn :) Văn hóa Rails có một cách khiến bạn cảm thấy ngu ngốc nếu bạn đặt câu hỏi như thế này.
mã allyourcode

Câu trả lời:


158

Chắc chắn là số nhiều .

Với định tuyến ổn định và một bộ điều khiển đơn

Bộ điều khiển:

dog_controller.rb  

Các tuyến:

map.resources :dogs  # => blows up  
map.resources :dog  # is ok, but...  
dogs_path # => blows up  
dog_path  # => ok  

Sử dụng bộ điều khiển số nhiều

Bộ điều khiển:

dogs_controller.rb

Các tuyến:

map.resources :dogs  
dogs_path # => ok  
dog_path # => ok  

rails generate controller --help có các ví dụ số nhiều:

Example:
`rails generate controller CreditCards open debit credit close`

CreditCards controller with URLs like /credit_cards/debit.
    Controller: app/controllers/credit_cards_controller.rb
    Test:       test/controllers/credit_cards_controller_test.rb
    Views:      app/views/credit_cards/debit.html.erb [...]
    Helper:     app/helpers/credit_cards_helper.rb

23
đã đồng ý. Thật khó hiểu khi thông báo trợ giúp của trình tạo Rails 3.1 cho bộ điều khiển sử dụng "CreditCard" (số ít) làm ví dụ.
bantic

4
Trợ giúp của Rails hiện sử dụng số nhiều: rails
create controller

3
vẫn có thẻ CreditCard số ít tại đây: Guide.rubyonrails.org/command_line.html#rails-generate
rcrogers

Làm cách nào chúng ta có thể viết ngôn ngữ cho bộ điều khiển số ít stackoverflow.com/questions/29650094/…
santosh

Vì vậy, việc đặt tên nên ở dạng số nhiều và đi kèm. ví dụ:: rails tạo bộ điều khiển Dogs chỉ mục mới tạo xóa hủy chỉnh sửa "??
BKSpurgeon

27

Sử dụng tên số nhiều cho bộ điều khiển chỉ là một quy ước.

Tên số nhiều thường nghe tự nhiên hơn (đặc biệt đối với các bộ điều khiển được gắn trực tiếp với một mô hình cụ thể: Người dùng -> Người dùng, v.v.), nhưng bạn có thể sử dụng bất cứ điều gì bạn muốn.

Đối với người trợ giúp, tất cả các trình trợ giúp đều có sẵn cho tất cả các bộ điều khiển, vì vậy về mặt kỹ thuật, cách bạn đặt tên cho người trợ giúp của mình không quan trọng chút nào. Đó chỉ là một quy ước khác để giữ chức năng trợ giúp của bộ điều khiển trong trình trợ giúp có cùng tên với bộ điều khiển.


10
Sẽ tự nhiên hơn khi bộ điều khiển tương ứng với Người dùng là Người dùng điều khiển sao ?? Ngoài ra, nếu bạn dựa vào các tuyến mặc định, bạn sẽ nhận được các url giống như / người dùng / chỉnh sửa, có vẻ như bạn đang chỉnh sửa tất cả người dùng. Đối với tôi, điều đó không tự nhiên chút nào.
mã allyourcode

5
@allyourcode: chà, tôi đoán là chủ quan thôi. đối với tôi, có / người dùng liệt kê tất cả người dùng tự nhiên hơn / người dùng.
Can Berk Güder

1
ồ, và đó là cách RESTful.
Can Berk Güder

3
@Can "the RESTful way" nghe giống như một bài thánh ca sùng bái. Tuy nhiên, điều đó không thực sự làm tôi ngạc nhiên, vì nhìn chung Rails khá tôn giáo. Tôi thích cách Rails bị ám ảnh bởi REST, nhưng các tuyến đường mặc định vẫn chưa yên tâm. Ngay cả việc cấu hình các tuyến RESTful cũng không tự nhiên. Bao gồm: điều kiện => {: method =>: post} trong đối số thứ hai để làm cho kết nối không có ý nghĩa, như băm là nghĩa vụ để xác định làm thế nào để xử lý bất kỳ yêu cầu phù hợp với quy tắc hiện hành, không cho dù bất kỳ yêu cầu nhất định phù hợp với quy tắc hiện tại .
mã allyourcode

2
@allyourcode Theo đó , lộ trình mặc định để chỉnh sửa là / users /: id / edit thay vì / users / edit. Nói "trong số tất cả người dùng, hãy chỉnh sửa người dùng với id: id" nghe có vẻ hoàn toàn tự nhiên đối với tôi.
DavidG

19

Mô hình là số ít vì nó tham chiếu đến một đối tượng đơn lẻ như Người dùng. Bộ điều khiển là số nhiều vì nó là các điều khiển (phương thức) cho tập hợp Người dùng. Cách đặt tên các tuyến đường là tùy thuộc vào từng nhà phát triển. Tôi chưa bao giờ có người dùng phàn nàn rằng URL cho một yêu cầu web là số ít hoặc số nhiều. Kết quả cuối cùng để duy trì một quy ước chung cho những người đóng góp hiện tại và tương lai trong khi cung cấp các hiển thị trang chất lượng hoặc các yêu cầu API cho người dùng cuối.


12

Bạn có giải thích rất đầy đủ trong hướng dẫn Rails: http://edgeguides.rubyonrails.org/routing.html#resource-routing-the-rails-default


4
thực sự đây là câu trả lời đúng b / c nếu bạn đọc nó, nó giải thích rằng số nhiều là câu trả lời đúng cho một tập hợp các nguồn lực. Đối với tài nguyên singleton, số ít là câu trả lời phù hợp. Ví dụ trong tài liệu. Và trên thực tế, điều này đã được trả lời rõ ràng trong bài đăng khác này: stackoverflow.com/questions/2614858/…
Rob

Các câu trả lời được hỗ trợ bởi các tài liệu tham khảo chính thức như trong bài đăng này sẽ giúp ích cho người mới rất nhiều! Cảm ơn bạn
Wasif Hossain

9

Quy ước Rails là một bộ điều khiển xử lý một mô hình, cho dù một hay nhiều phiên bản của mô hình đó có thể tồn tại trong thời gian chạy hay không. Tuy nhiên, bạn có thể có một ứng dụng Rails trong đó (một số) bộ điều khiển (và các khung nhìn được liên kết) không được liên kết với bất kỳ mô hình cụ thể nào, mà là xử lý một bộ chức năng phức tạp hơn. Trong trường hợp này, tính năng đa nguyên tự động không có ý nghĩa gì.

Ứng dụng Rails mà tôi hiện đang làm việc phù hợp với thể loại này và tôi chỉ đơn giản là khiến tôi khó chịu khi Rails mong đợi rằng các từ định danh mà tôi xác định là số ít ở một nơi sau đó được sử dụng ở dạng số nhiều của chúng ở những nơi khác. Ví dụ: tôi có thể muốn định nghĩa một cái gì đó như thế này trong config/routes.rb:

  resource :dashboard, :only => [:show]

và sau đó tôi muốn một bộ điều khiển DashboardControllerhiển thị thông tin tóm tắt về các khía cạnh nhất định của ứng dụng, thu thập thông tin từ nhiều hơn một bảng cơ sở dữ liệu. Vì vậy, ở đây, Dashboardkhông đề cập đến bất kỳ mô hình nào của ứng dụng và sẽ rất lạ nếu có tên của bộ điều khiển DashboardsController.

Tôi đã tìm thấy một giải pháp tốt cho sự khó chịu của quá trình đa năng tự động trong câu trả lời này . Nói tóm lại, hãy chỉnh sửa tệp config/initializers/inflections.rbvà thêm các từ bạn không muốn để được tự động đa nguyên hóa vào định nghĩa này:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable %w( dashboard foo bar baz )
end

3

Quy ước đặt tên của bộ điều khiển trong Rails ủng hộ sự đa dạng hóa của từ cuối cùng trong tên bộ điều khiển, mặc dù nó không được yêu cầu nghiêm ngặt (ví dụ ApplicationController).

Ví dụ, ClientsControllerđược ưu tiên đối với ClientController, SiteAdminsControllerđược ưu tiên đối với SiteAdminController hoặc SitesAdminsController, v.v.

Việc tuân theo quy ước này sẽ cho phép bạn sử dụng các trình tạo tuyến mặc định (ví dụ: tài nguyên, v.v.) mà không cần phải đủ điều kiện cho từng :pathhoặc :controllervà sẽ giữ cho việc sử dụng URL và trình trợ giúp đường dẫn nhất quán trong suốt ứng dụng của bạn.

Tham khảo: Tài liệu quy ước đặt tên bộ điều khiển-Rails



2

Nếu bộ điều khiển là một tài nguyên thì nó phải là số nhiều ...

Ví dụ

Bộ điều khiển

articles_controller.rb

Mô hình

article.rb

Nhưng bạn có thể sử dụng tên bộ điều khiển số ít khi bạn không có các mô hình tương ứng như

welcome_controller.rb

1

Sử dụng số nhiều có vẻ tốt hơn, và sau đó nếu bạn có bộ điều khiển xử lý truy vấn số ít, tức là người dùng, thì bạn vẫn có thể đặt tên cho url / người dùng.

Với người trợ giúp, thường không cần phải có người trợ giúp cho mọi bộ điều khiển và thường sẽ có các phương pháp trợ giúp mà bạn có thể sử dụng ascorss nhiều bộ điều khiển và thay vào đó, bạn có thể đặt chúng vào trình trợ giúp tùy chỉnh thay vì như ví dụ: layout_helper hoặc bất kỳ tệp được đặt tên tốt khác.


Nhận xét tương tự như dành cho Can Berk Guder. Ngoài ra, tôi đã gặp một số khó khăn khi theo dõi câu / đoạn cuối cùng của bạn vì có quá ít dấu câu!
mã allyourcode

1
Xin lỗi về điều đó, tất cả những gì tôi muốn nói là có thể là một ý tưởng tốt hơn để tạo các trình trợ giúp tùy chỉnh thay vì sử dụng các trình trợ giúp mặc định vì tên của các trình trợ giúp mặc định không phải lúc nào cũng ghi lại đầy đủ nơi chúng sẽ được sử dụng. Nếu bạn có một số phương thức trợ giúp sẽ được sử dụng cho bố cục, hãy gọi nó là layout_helper.
nitecoder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.