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.