2013-07-18 6 views

답변

41

모델을 생성 할 때 모델과 관련 구성 요소가 제공됩니다. 이 같은 주제를 설명하는 나의 마음에 드는 방법 중 하나는 실제로 그것을 밖으로 시도하거나 시도하는 다른 사람을 격려하는 것입니다, 그래서 레일 프로젝트에서 명령 rails generate model Foo name:string description:text를 입력한다면, 나는 얻을 것 :

invoke active_record 
    create db/migrate/20130719012107_create_foos.rb 
    create app/models/foo.rb 
    invoke test_unit 
    create  test/unit/foo_test.rb 
    create  test/fixtures/foos.yml 

첫 번째에게 행은 Active Record을 호출합니다.이 모델은 기본적으로 모델을 데이터베이스에 연결합니다. 다음 줄에서는 마이그레이션 파일을 만듭니다. 이주 파일에는 데이터베이스를 변경하기위한 지시 사항이 들어 있습니다. 이 첫 번째 마이그레이션 파일은 'foos'라는 데이터베이스 테이블을 만들고 'name'및 'description'에 대한 열을 생성합니다.

다음 줄은 모델 자체를 만듭니다. 이 모델은 기본적으로 Active Record로부터 상속받은 Ruby 클래스입니다. 이것이 의미하는 바는 Active Record에서 호출 할 수있는 모든 메소드를 이제 모델에서 호출 할 수 있다는 것입니다. 마지막 세 줄은 기본적으로 모델에 대한 관련 테스트 파일을 만듭니다. RSpec을 사용하고 있다면 스펙 파일이 대신 작성됩니다.

레일즈 애플리케이션에 모델 만있는 경우 페이지에 정보를 표시하는보기가 없으며 정보의 흐름을 제어하는 ​​지침도 없습니다. 당신의 선택은 컨트롤러를 만들어서 (뷰를 생성 함), 모델, 뷰, 컨트롤러를 생성하고, routes.rb 파일에 쓰는 스캐 폴드를 생성하는 것입니다. 내가 rails generate scaffold foo를 실행 한 경우 내가 얻을 것 :

invoke active_record 
    create db/migrate/20130719013307_create_foos.rb 
    create app/models/foo.rb 
    invoke test_unit 
    create  test/unit/foo_test.rb 
    create  test/fixtures/foos.yml 
    invoke resource_route 
    route resources :foos 
    invoke scaffold_controller 
    create app/controllers/foos_controller.rb 
    invoke erb 
    create  app/views/foos 
    create  app/views/foos/index.html.erb 
    create  app/views/foos/edit.html.erb 
    create  app/views/foos/show.html.erb 
    create  app/views/foos/new.html.erb 
    create  app/views/foos/_form.html.erb 
    invoke test_unit 
    create  test/functional/foos_controller_test.rb 
    invoke helper 
    create  app/helpers/foos_helper.rb 
    invoke  test_unit 
    create  test/unit/helpers/foos_helper_test.rb 
    invoke assets 
    invoke coffee 
    create  app/assets/javascripts/foos.js.coffee 
    invoke scss 
    create  app/assets/stylesheets/foos.css.scss 
    invoke scss 
identical app/assets/stylesheets/scaffolds.css.scss 

가 귀하의 질문에 대답하기 위해, 비계의 장점은 빠르고 쉽게, 그리고 모든 당신을 위해 사전 구성되어 있다는 점이다. 그러나 스캐 폴드와 독립적으로 모델을 생성하고 (필요하다면 컨트롤러/뷰를 생성하고 routes.rb 파일을 직접 작성하는 것의) 장점은 앱을보다 강력하게 제어하고 모양과 기능을 제어 할 수 있다는 것입니다. 불필요한 코드 일 경우 행동 주도 개발 또는 테스트 주도 개발을 사용할 수 있으며 다른 사람이 추가하려고하는 다른 것들을 사용할 수 있습니다.

마지막 조언은 다음과 같습니다. 레일스는 매우 사용자 친화적이므로 직접 실험 해보십시오. generate 명령을 해당 destroy 명령으로 실행 취소 할 수 있습니다. 예를 들어 rails destroy scaffold Foorails generate Scaffold Foo name:string description:string에 의해 생성 된 모든 파일을 삭제하므로 실험적으로 프로젝트를 돌이킬 수 없게 망칠 필요가 없습니다.

+0

나는 또한 encour해야 발판 스토리를 파괴 이 주제에 대한 공식 Rails 가이드를 읽으십시오. 액티브 레코드 및 마이그레이션과 같은 것들에 대한 꽤 높은 수준의 개요를 제공했지만, 귀하의 질문에 대답하기에 충분할 것으로 기대됩니다! – aceofbassgreg

+0

놀라운 대답 정말 고마워, 너는 나를 많이 도왔다 – SsouLlesS

+0

나는 같은 질문을했다. 좋은 설명. 감사. – whitehat

4

모델을 생성하는 지지체를 포함하는 생성하지만

  • 하여 RESTful 노선
  • 모델의 RESTful 처리 컨트롤러가 필요
  • 보기
  • 시험 스텁
  • 대한 모든 액션을 가지는 제어부를 생성

새로운 Rails 사용자는 스캐 폴딩을 시작하는 것이 좋습니다.

0

새로운 사용자는 모든 구성 요소가 함께 작동하는 방식을 이해하지 못하기 때문에 비계로 혼란 스러울 수 있습니다. 스캐 폴딩은 대개 반복되는 작업에 대한 지름길을 원하는 숙련 된 사용자에게 가장 적합합니다.

$rails generate scaffold <name> 

당신이 전체 CRUD (생성, 읽기, 업데이트, 삭제) 웹 인터페이스와 컨트롤러, 모델, 뷰를 사용할 준비가 자동으로 생성 할 수 있습니다와

0

. 모델을 생성하는 것보다 쉽고 빠르지 만 생성하는 코드가 응용 프로그램에 완벽하지는 않습니다.

scaffold은 간단한 예제, 빠른 모형 또는 테스트에 유용합니다. 당신이 당신의 마음을 변경하고 이미 모델을 생성 한 후 비계를 사용하기로 결정한 경우

, 당신은 항상

$rails generate scaffold <name> 

그것은 모든 누락 된 파일을 만듭니다 실행할 수 있습니다. 당신은 비계를 사용에 하다며 행복 경우 또는, 당신은 항상 다음과 같은 방법으로 제거 할 수 있습니다 :

를 생성 발판 :

$rails generate scaffold Story 

당신이 당신의 파일을 마이그레이션 한 경우, 수행 롤백 :

$rake db:rollback 

파괴 또는 취소 발판 : $ 레일