수색…


컨트롤러

컨트롤러 클래스 이름은 복수형입니다. 그 이유는 컨트롤러가 객체 인스턴스의 여러 인스턴스를 제어하기 때문입니다.

: OrdersControllerorders 테이블의 컨트롤러입니다. Rails는 /app/controllers 디렉토리에있는 orders_controller.rb 파일에서 클래스 정의를 찾는다.

: PostsControllerposts 테이블의 컨트롤러가됩니다.

컨트롤러 클래스 이름에 대문자가 여러 개인 단어가있는 경우 테이블 이름은 이러한 단어 사이에 밑줄이있는 것으로 간주됩니다.

예 : 컨트롤러의 이름이 PendingOrdersController 경우이 컨트롤러의 파일 이름은 pending_orders_controller.rbpending_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_controllerApplicationController 로 변환하고 다시 돌려주는 것과 같이 다른 명명 스타일 간 변환을 위해 "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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow