비계를 생성하고 레일스에서 모델을 생성하는 것과 다른 점은 무엇입니까? 그 중 하나의 장점/단점은 무엇입니까?레일의 비계와 모델의 차이점
답변
모델을 생성 할 때 모델과 관련 구성 요소가 제공됩니다. 이 같은 주제를 설명하는 나의 마음에 드는 방법 중 하나는 실제로 그것을 밖으로 시도하거나 시도하는 다른 사람을 격려하는 것입니다, 그래서 레일 프로젝트에서 명령 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 Foo
은 rails generate Scaffold Foo name:string description:string
에 의해 생성 된 모든 파일을 삭제하므로 실험적으로 프로젝트를 돌이킬 수 없게 망칠 필요가 없습니다.
모델을 생성하는 지지체를 포함하는 생성하지만
- 하여 RESTful 노선
- 모델의 RESTful 처리 컨트롤러가 필요
- 보기
- 시험 스텁 대한 모든 액션을 가지는 제어부를 생성
새로운 Rails 사용자는 스캐 폴딩을 시작하는 것이 좋습니다.
새로운 사용자는 모든 구성 요소가 함께 작동하는 방식을 이해하지 못하기 때문에 비계로 혼란 스러울 수 있습니다. 스캐 폴딩은 대개 반복되는 작업에 대한 지름길을 원하는 숙련 된 사용자에게 가장 적합합니다.
$rails generate scaffold <name>
당신이 전체 CRUD (생성, 읽기, 업데이트, 삭제) 웹 인터페이스와 컨트롤러, 모델, 뷰를 사용할 준비가 자동으로 생성 할 수 있습니다와
. 모델을 생성하는 것보다 쉽고 빠르지 만 생성하는 코드가 응용 프로그램에 완벽하지는 않습니다.
scaffold은 간단한 예제, 빠른 모형 또는 테스트에 유용합니다. 당신이 당신의 마음을 변경하고 이미 모델을 생성 한 후 비계를 사용하기로 결정한 경우
, 당신은 항상
$rails generate scaffold <name>
그것은 모든 누락 된 파일을 만듭니다 실행할 수 있습니다. 당신은 비계를 사용에 하다며 행복 경우 또는, 당신은 항상 다음과 같은 방법으로 제거 할 수 있습니다 :
를 생성 발판 :
$rails generate scaffold Story
당신이 당신의 파일을 마이그레이션 한 경우, 수행 롤백 :
$rake db:rollback
을
파괴 또는 취소 발판 : $ 레일
나는 또한 encour해야 발판 스토리를 파괴 이 주제에 대한 공식 Rails 가이드를 읽으십시오. 액티브 레코드 및 마이그레이션과 같은 것들에 대한 꽤 높은 수준의 개요를 제공했지만, 귀하의 질문에 대답하기에 충분할 것으로 기대됩니다! – aceofbassgreg
놀라운 대답 정말 고마워, 너는 나를 많이 도왔다 – SsouLlesS
나는 같은 질문을했다. 좋은 설명. 감사. – whitehat