Ruby on Rails
이름 지정 규칙
수색…
컨트롤러
컨트롤러 클래스 이름은 복수형입니다. 그 이유는 컨트롤러가 객체 인스턴스의 여러 인스턴스를 제어하기 때문입니다.
예 : OrdersController
는 orders
테이블의 컨트롤러입니다. Rails는 /app/controllers
디렉토리에있는 orders_controller.rb
파일에서 클래스 정의를 찾는다.
예 : PostsController
는 posts
테이블의 컨트롤러가됩니다.
컨트롤러 클래스 이름에 대문자가 여러 개인 단어가있는 경우 테이블 이름은 이러한 단어 사이에 밑줄이있는 것으로 간주됩니다.
예 : 컨트롤러의 이름이 PendingOrdersController
경우이 컨트롤러의 파일 이름은 pending_orders_controller.rb
가 pending_orders_controller.rb
.
모델
이 모델은 깨지지 않은 MixedCase의 클래스 명명 규칙을 사용하여 명명되며 항상 테이블 이름의 단수입니다.
예 : 테이블의 이름이 orders
경우, 연관된 모델의 이름은 Order
예 : 테이블의 이름이 posts
인 경우 연관된 모델의 이름은 Post
Rails는 /app/models
디렉토리의 order.rb
파일에서 클래스 정의를 찾는다.
모델 클래스 이름에 대문자가 여러 개인 단어가있는 경우 테이블 이름은 이러한 단어 사이에 밑줄이있는 것으로 간주됩니다.
예 : 모델 이름이 BlogPost
경우 가정 테이블 이름은 blog_posts
됩니다.
보기 및 레이아웃
컨트롤러 동작이 렌더링되면 Rails는 컨트롤러의 이름을 기반으로 일치하는 레이아웃과 뷰를 찾습니다.
보기 및 레이아웃은 app/views
디렉토리에 있습니다.
PeopleController#index
액션에 대한 요청이 주어지면 Rails는 다음을 검색합니다.
-
app/views/layouts/
people
이라는app/views/layouts/
(또는 일치하는 항목이없는 경우application
) - 기본적으로
index.html.erb
라는보기가app/views/people/
에 있습니다. -
index_new.html.erb
라는 다른 파일을 렌더링하려면PeopleController#index
와 같이render 'index_new'
와 같은 코드를 작성해야합니다. -
render 'index_new', layout: 'your_layout_name'
을 작성하여 모든action
에 대해 다른layouts
을 설정할 수 있습니다render 'index_new', layout: 'your_layout_name'
파일 이름 및 자동 로딩
Rails 파일과 Ruby 파일은 일반적으로 lower_snake_case
파일 이름을 사용 lower_snake_case
이름을 지정해야합니다. 예 :
app/controllers/application_controller.rb
ApplicationController
클래스 정의가 들어있는 파일입니다. PascalCase
는 클래스 및 모듈 이름에 사용되지만 해당 파일은 여전히 lower_snake_case
합니다.
Rails는 필요에 따라 자동 로딩 파일을 사용하고 application_controller
를 ApplicationController
로 변환하고 다시 돌려주는 것과 같이 다른 명명 스타일 간 변환을 위해 "inflection"을 사용하기 때문에 일관된 이름 지정이 중요합니다.
예를 들어 Rails가 BlogPost
클래스가 존재하지 않는다고 (아직로드되지 않았다면), blog_post.rb
라는 파일을 blog_post.rb
그 파일을로드하려고 시도합니다.
따라서 오토로더가 파일 이름이 컨텐츠와 일치 할 것으로 기대하기 때문에 포함 된 파일의 이름을 지정하는 것도 중요합니다. 예를 들어 blog_post.rb
just Post
라는 클래스가 포함되어 있으면 LoadError
: Expected [some path]/blog_post.rb to define BlogPost
합니다.
app/something/
(예 : / models / products /) 아래에 dir을 추가하면
- 새로운 dir 안에 모듈과 클래스를 네임 스페이스하고 싶으면 아무 것도 할 필요가 없으며 스스로로드 될 것입니다. 예를 들어
app/models/products/ you would need to wrap your class in
제품app/models/products/ you would need to wrap your class in
. - 내 새 dir 안에 모듈과 클래스를 네임 스페이스하지 않으려면
config.autoload_paths += %W( #{config.root}/app/models/products )
를application.rb
에 자동로드하도록 추가해야application.rb
.
특히 영어가 모국어가 아닌 경우주의해야 할 또 하나의 사실은 레일스가 영어로 된 불규칙 복수 명사를 설명한다는 사실입니다. 따라서 "Foot"이라는 모델이 있다면 레일 "마법"라우팅 (그리고 더 많은 기능들)을 작동 시키려면 해당 컨트롤러가 "FootsController"보다는 "FeetController"라고 불러야합니다.
컨트롤러 이름의 모델 클래스
이런 식으로 컨트롤러 이름에서 Model 클래스를 가져올 수 있습니다 (컨텍스트는 Controller 클래스 임).
class MyModelController < ActionController::Base
# Returns corresponding model class for this controller
# @return [ActiveRecord::Base]
def corresponding_model_class
# ... add some validation
controller_name.classify.constantize
end
end