14

私がこれを正しく読んでいるかどうかはわかりませんが、Scaffold は全体として 1 対多の関係を行うわけではないようです。たとえば、messagesscaffold を使用して作成しcomments、それらmessages(one message-> many comments) が必要な場合は、すべてを変更する必要があります。たとえば、commentnewビューでこれを変更する必要があります

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

これに

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

@message次に、Action を変更してvar...を設定します。

これは現在、Scaffold で自動的に行うことはできませんよね?

4

5 に答える 5

13

はい。足場は、モデルと関連するコントローラーに対して機能します。関係を処理したり、機能したりしません。

Scaffold の主な目的は、コントローラーと関連するビューを使用してモデルで CRUD を実行することです。それで全部です。関係のようなその他の要件は、手動でコーディングする必要があります。

于 2009-02-02T05:11:12.090 に答える
12

これは本当ですが、それは話の終わりではありません。Scaffoldには少なくとも2つの選択肢があり、どちらも非常にうまく機能し、クラス間の関係を自動的に取得します(has_manyなどのActiveRecord関係インジケーターに基づく)。これらの選択肢の1つは合理化され、もう1つはActiveScaffoldです。

これらは主に、ユーザーが入力したデータではなく、システムが必要とするデータを入力する場合に役立ちます。たとえば、スキャフォールドの選択肢の1つがめったに使用されない機能でうまく機能する場合、CRUDの完全なUIを構築する意味がないテーブルの管理タスクにそれらを使用します。ただし、メッセージへのコメントには使用したくないでしょう。

于 2009-02-05T20:18:43.360 に答える
3

Hobo for Railsのようなプロジェクトがあり、フィールドと関連付けをモデル自体に保持できることに注意してください。関連付けを足場にすることはできませんが、かなり近いものです。

背後でさらに多くのアプリケーションを構築することで、この糖分を支払うことになります。独自の動作を展開する代わりに、通常は事前に構築された動作の大規模なバンクから必要なものを差し引いています。

于 2009-08-12T21:02:10.970 に答える
2

1 対多の関係を機能させるために、重い Rails 管理フレームワークは必要ありません。

足場を使用して、ほとんどの場所に行くことができます。

コントローラーと _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

そして、beers テーブルを参照する外部キー (beer_id) を持つdevelopersテーブル:

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

足場を使用して両方のテーブルを作成できます。

$ rails g 足場ビール名

$ rails g scaffold 開発者名 beer_id:integer

scaffold コマンドは、各モデルのコントローラーとビューを作成します。

コントローラーとビューを少し変更して、ドロップダウン メニューで各開発者のビールを選択できるようにする必要があります。

アプリ/ビュー/開発者/_form.html.erb

生成された text_field と beer_id のラベルを次のように置き換えます。

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

アプリ/コントローラー/developer_controller.rb

コントローラーの new メソッドと edit メソッドを編集します。

  # 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

スクリーンショット

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

ノート

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 操作以上の操作が必要な場合は、どのファイルを変更する必要があるかを知るだけで済みます。

それが役立つことを願っています。〜レックス

于 2014-09-12T15:38:56.010 に答える
1

足場は足場です。テーブルで CRUD 以外の何かが必要な場合 (これは scaffold の機能です)、生成された scaffolding コードを変更するか、独自のコードをロールする必要があります。

于 2009-02-02T13:04:32.227 に答える