Rails의 단수 또는 복수 컨트롤러 및 도우미 이름


112

컨트롤러와 도우미에 단수 이름을 사용하는 데 단점이 있습니까? 이것에 의존하는 것은 아무것도 없습니다. 적어도 내 제한된 실험에 따르면 도우미는 해당 컨트롤러와 단수 대 복수에 대해 동일한 선택을 할 필요가없는 것 같습니다. 사실인가요?


2
단수 또는 복수 컨트롤러 이름을 결정하는 데 동일한 딜레마가 발생했습니다!
— Andrew

15
감사합니다 :) Rails 문화는 이런 질문을한다면 어리석은 기분을 느끼게하는 방법이 있습니다.
— allyourcode

답변:


158

확실히 복수형 .

편안한 라우팅과 단일 컨트롤러

제어 장치:

dog_controller.rb  

노선 :

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

복수 컨트롤러 사용

제어 장치:

dogs_controller.rb

노선 :

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

rails generate controller --help 복수의 예가 있습니다.

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
동의했습니다. 컨트롤러에 대한 Rails 3.1 생성기 도움말 메시지가 "CreditCard"(단수)를 예로 사용하는 것은 혼란 스럽습니다.
— bantic

4
Rails 도움말은 이제 복수를 사용합니다. rails는 컨트롤러를 생성합니다 CreditCards open debit credit close
— notapatch

3
아직 여기 단수 크레딧 카드를 가지고 guides.rubyonrails.org/command_line.html#rails-generate
— rcrogers은

단일 컨트롤러에 대한 로케일을 어떻게 작성할 수 있습니까? stackoverflow.com/questions/29650094/…
— santosh

따라서 이름은 복수형이어야하며 대소 문자를 사용해야합니다. 예 : : rails 생성 컨트롤러 Dogs new index create delete destroy edit "??
— BKSpurgeon

27

컨트롤러에 복수 이름을 사용하는 것은 관례 일뿐입니다.

일반적으로 복수 이름은 더 자연스럽게 들리지만 (특히 특정 모델에 직접 연결된 컨트롤러의 경우 : 사용자-> 사용자 등) 원하는대로 사용할 수 있습니다.

도우미의 경우 기본적으로 모든 컨트롤러에 대해 모든 도우미를 사용할 수 있으므로 기술적으로 도우미 이름을 지정하는 방법은 전혀 중요하지 않습니다. 컨트롤러와 이름이 같은 도우미에 컨트롤러의 도우미 기능을 유지하는 것은 또 다른 규칙입니다.


10
User에 해당하는 컨트롤러가 UserController가되는 것이 더 자연스럽지 않습니까? 또한 기본 경로를 사용하는 경우 모든 사용자를 편집하는 것처럼 보이는 / users / edit와 같은 URL이 표시됩니다. 나에게 그것은 전혀 자연스럽지 않습니다.
— allyourcode

5
@allyourcode : 음, 모든 것이 주관적이라고 생각합니다. 나에게 / users가 모든 사용자를 나열하는 것은 / user보다 더 자연 스럽습니다.
— Can Berk Güder

1
오, RESTful 방법입니다.
— Can Berk Güder

3
@Can "RESTful 방법"은 컬트 성가처럼 들립니다. Rails는 전반적으로 꽤 종교적이기 때문에 그것은 나를 놀라게하지 않습니다. Rails가 REST에 집착하는 방식이 마음에 들지만 기본 경로는 편안하지 않습니다. RESTful 경로를 구성하는 것조차 부자연 스럽습니다. 연결을위한 두 번째 인수에 : conditions => {: method => : post}를 포함하는 것은 의미가 없습니다. 해시는 주어진 요청이 현재 규칙과 일치 하는지 여부가 아니라 현재 규칙과 일치하는 요청을 처리하는 방법을 지정해야하기 때문입니다. .
— allyourcode

2
@allyourcode에 따르면, 이 대신에 / 사용자 / 편집의 ID / 편집 : 편집의 기본 경로 사용자 / /입니다. "모든 사용자 중에서 id : id로 사용자를 편집하십시오"라고 말하는 것은 매우 자연스럽게 들립니다.
— DavidG 2013

19

Model은 User와 같은 단일 객체를 참조하기 때문에 단수입니다. 컨트롤러는 사용자 수집을위한 컨트롤 (메소드)이기 때문에 복수입니다. 경로 이름을 지정하는 방법은 모두 해당 개별 개발자에게 달려 있습니다. 웹 요청의 URL이 단수 또는 복수라고 사용자가 불평 한 적이 없습니다. 최종 사용자에게 품질 페이지 표시 또는 API 요청을 제공하는 동안 현재 및 미래의 기여자에 대한 공통 규칙을 유지하기위한 최종 결과입니다.


12

Rails 가이드에 아주 완전한 설명이 있습니다 : http://edgeguides.rubyonrails.org/routing.html#resource-routing-the-rails-default


4
실제로 이것은 정답입니다 b / c를 읽으면 복수가 리소스 모음에 대한 정답임을 설명합니다. 싱글 톤 리소스의 경우 singular가 정답입니다. 문서의 예. 그리고 실제로 이것은 다른 게시물에서 잘 답변되어 있습니다. stackoverflow.com/questions/2614858/…
— Rob

이 게시물과 같은 공식 참조로 뒷받침되는 답변은 초보자에게 많은 도움이됩니다! 주셔서 감사합니다
— Wasif의 Hossain에게

9

런타임 중에 해당 모델의 인스턴스가 하나 이상 존재할 수 있는지 여부에 관계없이 하나의 컨트롤러가 하나의 모델을 처리하는 것은 Rails 규칙입니다. 그러나 컨트롤러 (및 관련 뷰) 중 일부가 특정 모델과 연결되지 않고 더 복잡한 기능 집합을 처리하는 Rails 애플리케이션을 사용할 수 있습니다. 이 경우 자동 복수화는 의미가 없습니다.

내가 현재 작업중인 Rails 애플리케이션은이 카테고리에 적합하며, Rails가 내가 한 곳에서 단수로 정의한 식별자가 다른 곳에서는 복수 형태로 사용되기를 기대한다는 사실은 제게 짜증이납니다. 예를 들어 다음과 같이 정의하고 싶을 수 있습니다 config/routes.rb.

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

그런 다음 컨트롤러 DashboardController가 응용 프로그램의 특정 측면에 대한 요약 정보를 표시하여 둘 이상의 데이터베이스 테이블에서 정보를 수집하기를 원합니다 . 따라서 여기서는 Dashboard응용 프로그램의 어떤 모델도 언급하지 않으며 컨트롤러의 이름이 DashboardsController.

나는 이 답변 에서 자동 복수화의 자극에 대한 좋은 해결책을 찾았습니다 . 간단히 말해서 파일을 편집 config/initializers/inflections.rb하고 자동으로 복수화되지 않을 단어를이 정의에 추가합니다.

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

3

Rails 에서 컨트롤러의 명명 규칙은 컨트롤러 이름 의 마지막 단어를 복수화 하는 것을 선호 하지만, 엄격하게 요구되는 것은 아닙니다 (예 :)ApplicationController .

예를 들어, ClientsController가보다 바람직하고 ClientController, r 또는 SiteAdminsController보다 바람직하다 .SiteAdminControlleSitesAdminsController

이 규칙을 따르면 각 :path또는 을 한정 할 필요없이 기본 경로 생성기 (예 : 리소스 등)를 사용할 수 있으며 :controller애플리케이션 전체에서 URL 및 경로 도우미의 사용을 일관되게 유지할 수 있습니다.

참조 : 컨트롤러 명명 규칙-레일 문서



2

컨트롤러가 리소스이면 복수형이어야합니다.

예를 들면

제어 장치

articles_controller.rb

모델

article.rb

그러나 다음과 같은 해당 모델이 없을 때 단일 컨트롤러 이름을 사용할 수 있습니다.

welcome_controller.rb

1

복수형을 사용하는 것이 더 좋게 들립니다. 단수 리소스를 처리하는 컨트롤러 (예 : 사용자)가있는 경우 여전히 url / user의 이름을 지정할 수 있습니다.

도우미를 사용하면 모든 컨트롤러에 대한 도우미가 필요하지 않은 경우가 많으며 ascorss 여러 컨트롤러를 사용할 수 있고 응용 프로그램 도우미를 통해 모든 컨트롤러를 처리 할 수있는 도우미 메서드가있을 것입니다. 대신 layout_helper 또는 any 다른 잘 이름이 지정된 파일.


Can Berk Guder와 동일한 의견. 또한 구두점이 너무 적어서 마지막 문장 / 단락을 따라 가는데 어려움이있었습니다!
— allyourcode

1
죄송합니다. 기본 이름이 항상 사용할 위치를 완전히 캡처하는 것은 아니기 때문에 기본값을 사용하는 것보다 사용자 지정 도우미를 만드는 것이 더 나은 생각 일 수 있다는 것을 의미했습니다. 레이아웃에 사용할 도우미 메서드가 여러 개 있으면 layout_helper로 호출하세요.
— nitecoder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.