質問

読んでるかどうかわからない これ そうですが、Scaffold は完全に 1 対多の関係を行うことはないようです。たとえば、私が作成した場合 messages 足場を使って、それから私は欲しいです comments それらについて messages (1つ message -> たくさん comments)、すべてを経験して変更する必要があります。たとえば、これを変更する必要があります commentさんの new ビュー

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

これに

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

次に、アクションを変更して、 @message 変数...そのことなど。

現在、Scaffold を使用してこれを自動的に行うことはできません。

役に立ちましたか?

解決

これは物語の終わりではない、真のですが、。両方とも非常にうまく機能し、自動的に(has_manyのようなあなたのActiveRecordの関係指標に基づいて)クラス間の関係に拾うことを足場に、少なくとも2つの選択肢があります。これらの選択肢の一つは、合理にあり、他方は<のhref = "ですhttp:// 「REL = "noreferrer">のActiveScaffold のactivescaffold.com/ます。

彼らはあなたのシステムがそれはユーザが入力したデータではありません必要とするデータに入力するための主に役立ちます。例えば、私は足場の選択肢の一つはめったに使われない機能のためにうまく仕事をする際にCRUDのための完全なUIを構築するにはポイントがありませんテーブル上の管理タスクのためにそれらを使用します。あなたはしかし、メッセージへのコメントのためにそれらを使用したいとは思わないでしょう。

他のヒント

はい。足場は、モデルおよび関連コントローラで動作します。それはの世話をするかの関係では動作しません。

足場の主な目的は、CRUDコントローラと関連するビューを使用してモデルに行く取得することです。それで全部です。関係のような他の要件を手動で符号化されなければならない。

あなたはモデル自体の中にあなたのフィールドとの関連付けを維持することができRailsのためのホーボーのようなプロジェクトがあることに注意してください。あなたは足場協会はできませんが、それはかなり近いです。

あなたはあなたの背中の後ろに構築されたアプリケーションのより多くを持っていることによって、この砂糖を払ってしまいます。代わりに、独自の圧延、あなたは通常、あなたが事前に作成行動の大手銀行から必要なものを引いています。

1 対多の関係を機能させるために、Heavy 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

そして、 開発者 ビールテーブルを参照する外部キー (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

スキャフォールディングを使用して両方のテーブルを作成できます。

$rails g scaffold ビール名

$ Rails g scaffold 開発者名 beer_id:integer

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

各開発者向けにビールを選択するためのドロップダウン メニューを表示するには、コントローラーとビューを少し変更する必要があります。

app/views/developers/_form.html.erb

生成された beer_id の text_field と label を次のものに置き換えます。

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

app/controllers/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

スクリーンショット

enter image description here

enter image description here

enter image description here

ノート

レールの足場は素晴らしいです。作成されるすべてのファイルを確認してください。

$ 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