문제

내가 읽고 있는지 확실하지 않습니다 이것 맞습니다. 그러나 스캐 폴드는 전체적으로 일대일 관계를하지 않는 것 같습니다. 예를 들어, 내가 만든 경우 messages 스캐 폴드와 함께 원합니다 comments 그것에 messages (하나 message -> 많은 comments), 나는 모든 것을 통과하고 바꿔야한다. 예를 들어, 나는 이것을 comment'에스 new 보다

<% form_for(@comment) do |f| %>

이에

<% form_for([@message, @comment]) do |f| %>

그런 다음 조치를 변경하여 설정하십시오 @message var ... 무엇보다도.

이것은 현재 스캐 폴드로 자동으로 수행 할 수 없습니다.

도움이 되었습니까?

해결책

이것은 사실이지만 이야기의 끝이 아닙니다. 스캐 폴드에 대한 두 가지 대안이 모두 잘 작동하고 클래스 간의 관계를 자동으로 선택합니다 (Has_many와 같은 ActiveRecord 관계 표시기를 기반으로). 이러한 대안 중 하나는입니다 간소화 그리고 다른 하나는입니다 ActivesCaffold.

시스템에 사용자가 입력 한 데이터가 아닌 데이터를 입력하는 데 주로 도움이됩니다. 예를 들어, 스캐 폴드 대안 중 하나가 거의 사용되지 않은 기능에 대해 잘 작동 할 때 CRUD에 대한 완전한 UI를 구축 할 필요가없는 테이블의 관리 작업에 사용합니다. 그래도 메시지에 대한 의견을 위해 사용하고 싶지 않을 것입니다.

다른 팁

예. 스캐 폴드는 모델 및 관련 컨트롤러에서 작동합니다. 그것은 관계를 돌보거나 작동하지 않습니다.

Scaffold의 주요 목표는 CRUD가 컨트롤러 및 관련 뷰를 사용하여 모델을 사용하도록하는 것입니다. 그게 다야. 관계와 같은 다른 요구 사항은 수동으로 코딩되어야합니다.

같은 프로젝트가 있습니다 뜨내기 노동자 필드와 연관성을 모델 자체 내에 유지할 수있는 레일의 경우. 당신은 협회를 발판 할 수는 없지만 매우 가깝습니다.

당신은 등 뒤에 더 많은 응용 프로그램을 만들어이 설탕을 지불하게됩니다. 당신은 일반적으로 자신의 사전 제작 된 행동 은행에서 필요한 것을 빼고 있습니다.

일대일 관계를 유지하기 위해 무거운 레일 관리자 프레임 워크가 필요하지 않습니다.

스캐 폴딩을 사용하여 대부분의 길을 얻을 수 있습니다.

컨트롤러와 _form보기에서 조금 더 작업하면 나머지 길을 얻을 수 있습니다.

방법은 다음과 같습니다.

Story: Select a beer for a developer

In order to select a beer for a developer
As an admin
I want a mainly scaffolded interface to select that beer

Scenario 1: Select beer for new developer
Given I have clicked the <new> button  and entered the developer's name
When I click the beer dropdown
Then I should be presented with a list of beers to choose from
And that beer will be saved when I click <ok>

Scenario 2: Select a different beer for existing developer
Given I have clicked the <edit> button on the index page for a particular developer
When I click the beer dropdown
Then I should be presented with a list of beers to choose from
And that beer will be saved when I click <ok>

우리가 있다고 가정합니다 맥주 테이블:

  create_table "beers", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

그리고 a 개발자 맥주 테이블을 참조하는 외국 키 (beer_id)가있는 테이블 :

  create_table "developers", force: true do |t|
    t.string   "name"
    t.integer  "beer_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

스캐 폴딩을 사용하여 두 테이블을 만들 수 있습니다.

$ 레일 G 스캐 폴드 맥주 이름

$ Rails G 스캐 폴드 개발자 이름 Beer_id : 정수

스캐 폴드 명령은 각 모델의 컨트롤러와 뷰를 만듭니다.

우리는 컨트롤러와보기를 수정해야합니다. 드롭 다운 메뉴를 얻으려면 각 개발자의 맥주를 선택합니다.

앱/뷰/개발자/_form.html.erb

Beer_id의 생성 된 Text_field 및 레이블을 다음으로 바꾸십시오.

  <div class="field">
    <%= f.label :beer_id %><br />
    <%= collection_select(:developer, :beer_id, @beers, :id, :name, {:prompt => false}) %> 
  </div>

앱/컨트롤러/개발자 _controller.rb

컨트롤러의 새 및 편집 방법 편집 :

  # GET /developers/new
  def new
    @developer = Developer.new
    @beers = Beer.all
    respond_to do |format|
      format.html # new.html.erb
    end
  end


  # GET /developers/1/edit
  def edit
    @beers = Beer.all
    respond_to do |format|
      format.html # new.html.erb
    end    
  end

스크린 샷

enter image description here

enter image description here

enter image description here

메모

Rails 스캐 폴딩은 훌륭합니다. 당신을 위해 생성하는 모든 파일을보십시오.

$ be rails g scaffold beer name
      invoke  active_record
      create    db/migrate/20140912144218_create_beers.rb
      create    app/models/beer.rb
      invoke    rspec
      create      spec/models/beer_spec.rb
      invoke      factory_girl
      create        spec/factories/beers.rb
      invoke  resource_route
       route    resources :beers
      invoke  scaffold_controller
      create    app/controllers/beers_controller.rb
      invoke    erb
      create      app/views/beers
      create      app/views/beers/index.html.erb
      create      app/views/beers/edit.html.erb
      create      app/views/beers/show.html.erb
      create      app/views/beers/new.html.erb
      create      app/views/beers/_form.html.erb
      invoke    rspec
      create      spec/controllers/beers_controller_spec.rb
      create      spec/views/beers/edit.html.erb_spec.rb
      create      spec/views/beers/index.html.erb_spec.rb
      create      spec/views/beers/new.html.erb_spec.rb
      create      spec/views/beers/show.html.erb_spec.rb
      create      spec/routing/beers_routing_spec.rb
      invoke      rspec
      create        spec/requests/beers_spec.rb
      invoke    helper
      create      app/helpers/beers_helper.rb
      invoke      rspec
      create        spec/helpers/beers_helper_spec.rb
      invoke    jbuilder
      create      app/views/beers/index.json.jbuilder
      create      app/views/beers/show.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/beers.js.coffee
      invoke    scss
      create      app/assets/stylesheets/beers.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss

기본 CRUD 작업 이상을 원할 때 어떤 파일을 수정 해야하는지 아는 것입니다.

도움이되기를 바랍니다. ~ 렉스

스캐 폴드는 발판입니다. 테이블 위의 CRUD 이외의 것을 원할 때 (발판이 무엇인지/하는 것), 생성 된 스캐 폴딩 코드를 변경하거나 직접 굴려야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top