모델이 이미 존재할 때 '레일 생성 스캐 폴드'를 실행하는 방법은 무엇입니까?


332

Rails를 처음 사용하므로 현재 프로젝트가 이상한 상태입니다.

내가 처음 생성 한 것 중 하나는 "영화"모델이었습니다. 그런 다음 더 자세히 정의하기 시작하고 몇 가지 방법 등을 추가했습니다.

이제 rails generate scaffold라우팅, 뷰, 컨트롤러 등과 같은 것을 연결하기 위해 생성해야한다는 것을 알았 습니다.

스캐 폴딩을 생성하려고했지만 같은 이름의 마이그레이션 파일이 이미 존재한다는 오류가 발생했습니다.

"영화"에 대한 비계를 만드는 가장 좋은 방법은 무엇입니까? (레일 3 사용)


1
자신의 컨트롤러와보기 및 경로를 작성하는 것이 가장 좋습니다. 당신은 개념에 대해 더 배울 것입니다
Ben Aubin

1
@ penne12에 동의하십시오. 적어도 처음에는 개념에 익숙해 질 때까지 모든 코드가 수행하는 작업을 알 수 있습니다.
mydoghasworms

직접 관련이 없지만 엉망인 경우 rails destroy <etc>를 사용하십시오. 시작했을 때 이것이 정말 유용했음을 기억합니다.
Helsing

1
@BenAubin은 사실이지만 Rails의 아름다움은 계속 상용구를 작성할 필요가 없다는 것입니다.
Romuloux

답변:


596

TL; DR :rails g scaffold_controller <name>

이미 모델이 있지만 rails generate옵션 을 사용하여 필요한 컨트롤러 및 마이그레이션 파일을 생성 할 수 있습니다 . 실행 rails generate -h하면 사용 가능한 모든 옵션을 볼 수 있습니다.

Rails:
  controller
  generator
  helper
  integration_test
  mailer
  migration
  model
  observer
  performance_test
  plugin
  resource
  scaffold
  scaffold_controller
  session_migration
  stylesheets

모델에 대한 컨트롤러 스캐 폴드를 생성하려면을 참조하십시오 scaffold_controller. 명확성을 위해 여기에 대한 설명이 있습니다.

스캐 폴딩 된 컨트롤러와 해당 뷰를 스터브합니다. 모델 이름 CamelCased 또는 under_scored와 뷰 목록을 인수로 전달하십시오. 제어기 이름은 복수 버전의 모델 이름으로 검색됩니다.

모듈 내에 컨트롤러를 생성하려면 모델 이름을 'parent_module / controller_name'과 같은 경로로 지정하십시오.

앱 / 컨트롤러에서 컨트롤러 클래스를 생성하고 도우미, 템플릿 엔진 및 테스트 프레임 워크 생성기를 호출합니다.

리소스를 생성하려면 resource생성기를 사용하고 마이그레이션을 생성하려면 migration생성기를 볼 수도 있습니다 (이 광기에 패턴이 있음 참조). 이들은 누락 된 파일을 작성하여 자원을 빌드하는 옵션을 제공합니다. 또는 옵션을 rails generate scaffold사용하여 --skip존재하는 파일을 건너 뛸 수 있습니다. :)

발전기 내부의 옵션을 살펴 보는 데 시간을 할애하는 것이 좋습니다. 그것들은 내가 책과 같은 것들에 아주 잘 기록되어 있다고 생각하지 않지만 매우 편리합니다.


12
와우, 내가 프로그래밍 질문에 얻은 ​​최고의 답변 중 하나입니다. 감사!
Lan

12
나는 또한 기존 모델을 가지고 rails generate scaffold_controller MyModel있으며 뷰 레이어를 생성하지만 모델 속성 (테이블 열)을 포함하지 않으므로 직접 수동으로 추가해야합니다. 아무도 이것에 대한 해결책을 알고 있습니까? 저는 Rails 3.2.8에 있습니다.
aaronbartell

@aaronbartell 레일스에 모델 속성에 신경 쓰지 않는 'scaffold_controller'를 생성하도록 요청하고 있습니다. 이 작업은 모델이 너무 다음 원하는 생성하려는 경우, 파손되지 generate scaffold는 모델이있는 경우 그러나 당신은 발판 컨트롤러를 원하는 새로운 속성은 당신이 원하는 모델에 추가 scaffold_generator한 다음 migration필드 당신에게있는 거 변질와
리 자비스

9
@Lee-aaronbartell은 scaffold_controller가 전달 된 모델의 기존 속성에 대한 해당 뷰 입력을 생성하지 않는 방법을 묻지 않습니다. 이는 유효한 질문입니다 ... stackoverflow.com/q/17153864/165673
Yarin

67

에 의해 큰 대답 Lee Jarvis, 이것은 단지 명령입니다; 이미 User라는 기존 모델이 있습니다.

rails g scaffold_controller User

10
텍스트 단락을 읽기에는 너무 게으른 사람들에게 감사합니다!
Chris Cirefice

30

기존 데이터베이스로 rails 앱을 시작하는 사람들 schema_to_scaffold에게는 스캐 폴드 스크립트를 생성하는 멋진 gem이 있습니다. 출력 :

rails g scaffold users fname:string lname:string bdate:date email:string encrypted_password:string

당신의에서 schema.rb우리의 당신의 이름이 바뀐 schema.rb. 확인이


2
이것은 큰 저 작은 보석입니다, 그것은 나를 많이 도울 것입니다! Rails에 내장되어 있어야합니다!
피터 앤더슨

13

에서 레일 오 , 당신은 여전히 실행할 수 있습니다

$rails generate scaffold movie --skip

누락 된 비계 파일을 모두 만들거나

rails generate scaffold_controller Movie

컨트롤러를 작성하고보기 만합니다.

더 나은 설명을 원하시면 레일 스캐 폴드를 확인하십시오



10

모델 scaffold_controller을 사용 하고 전달해야 attributes합니다. 그렇지 않으면 속성없이 스캐 폴드가 생성됩니다.

rails g scaffold_controller User name email
# or
rails g scaffold_controller User name:string email:string

이 명령은 다음 파일을 생성합니다.

create  app/controllers/users_controller.rb
invoke  haml
create    app/views/users
create    app/views/users/index.html.haml
create    app/views/users/edit.html.haml
create    app/views/users/show.html.haml
create    app/views/users/new.html.haml
create    app/views/users/_form.html.haml
invoke  test_unit
create    test/controllers/users_controller_test.rb
invoke  helper
create    app/helpers/users_helper.rb
invoke    test_unit
invoke  jbuilder
create    app/views/users/index.json.jbuilder
create    app/views/users/show.json.jbuilder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.