0

私の RoR には、テーブルgamesstats、およびがありplayersます。各ゲームにはplayers,多くの「統計」があり、各ゲームには多くの「統計」がありますstatsplayers.私ができるようにしたいのは、ゲームの編集フォームにあります。新しい統計行を追加するためのフィールドの行が必要です。ゲームのプレイヤーごとに 1 つ。私はnested_attributesについて多くのことを読んできましたが、これを完全に行うための新しい優れたリソースを見つけました.

4

2 に答える 2

1

UPDATE: Here's an updated set of classes based on the new associations you've stated in your comment

# models/game.rb
class Game < ActiveRecord::Base
  has_many :teams
  accepts_nested_attributes_for :teams
  attr_accessible :name, :teams_attributes
end

# models/team.rb
class Team < ActiveRecord::Base
  belongs_to :game
  has_many :players
  accepts_nested_attributes_for :players
  attr_accessible :name, :players_attributes
end

# models/player.rb
class Player < ActiveRecord::Base
  belongs_to :team
  has_many :stats
  accepts_nested_attributes_for :stats, reject_if: proc { |attributes| attributes['name'].blank? }
  attr_accessible :name, :stats_attributes
end

# models/stat.rb
class Stat < ActiveRecord::Base
  belongs_to :player
  attr_accessible :name
end

# controllers/games_controller.rb
class GamesController < ApplicationController
  def edit
    @game = Game.find(params[:id])
    @game.teams.each do |team|
      team.players.each do |player|
        player.stats.build
      end
    end
  end

  def update
    @game = Game.find(params[:id])
    if @game.update_attributes(params[:game])
      render "show"
    else
      render text: "epic fail"
    end
  end
end

# games/edit.html.erb
<%= form_for @game do |f| %>
  <%= f.fields_for :teams do |tf| %>
    <p>Team: <%= tf.object.name %></p>
    <%= tf.fields_for :players do |pf| %>
      <p>Player: <%= pf.object.name %></p>
      <%= pf.fields_for :stats do |sf| %>
        <%= sf.text_field :name %>
      <% end %>
    <% end %>
  <% end %>
  <%= f.submit %>
<% end %>

これは、「別の統計を追加する」などの任意の種類の ajax を実行しないことに注意してください。各プレイヤーの最後に追加の空白フィールドを 1 つ貼り付けるだけです。さらに必要な場合は、GamesController#editアクションで空の統計オブジェクトをさらに構築するか、派手なパンツ JavaScript を実装することができます。うまくいけば、実際のデータを機能させるのに十分近づくことができます。

于 2012-05-02T14:43:48.513 に答える
0

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/197-nested-model-form-part-2

あなた自身のコードをもっと見なければ、具体的には言えませんが、基本的には、すべてのプレイヤーをループして統計を「構築」します... game.players.each {|p| p.build_stat} をフォームで実行し、再びすべてのプレイヤーをループして、統計を表示します (おそらく new_record? のものに制限しますか?) または、フォームでビルドを正しく実行して、空白のエントリを表示します。

ただし、モデルには潜在的な問題があると思います...統計が特定のゲームの特定の表現である場合、説明したモデルはそれらをリンクしません-それぞれにgame_idとplayer_idが必要です統計記録。その場合は、コントローラー メソッドですべての統計を作成し、それらをビューでループします。

于 2012-05-02T05:34:39.220 に答える