私はRailsの初心者です。私は3テーブルの選手、ロスターとラインアップを持っています。私は、選手が属しているロースターとラインアップ、ロースターhas_many選手、そしてラインナップhas_many選手の関係を作成するためのモデルエントリーを持っています。Rails 3.1のテーブルに新しいレコードを追加するメソッドを作成する
私は名簿を作成したとき、私が持っている問題は、私はroster_name属性を持っていると私はそれにシングルプレイヤーを追加することができています。私は同じ選手にもっと多くの選手を追加したいが、私は選手に選手を追加する方法に苦労している。デフォルトの新しいビューでは、_formパーシャルが呼び出され、まったく新しいリストを作成することが期待されます。これにより、再び1人のユーザーを追加できます。
新しいプレイヤーを既存の名簿に追加するためのレール方法は何ですか?私が必要とするコンポーネントを理解するのを助けてください。私は新しいプレーヤーを追加するフィールドを持つために呼び出すことができる新しい部分が必要ですか?新しいメソッドやコントローラを作成する必要がありますか?私が前提としているのは、新しいplayer_idを追加できる間に既存の名簿を参照する方法が必要だということです。どんな助けも素晴らしいだろう。ここで
は私のモデル/コントローラとビュー以来My model roster.rb
class Roster < ActiveRecord::Base
has_many :players
accepts_nested_attributes_for :players, :allow_destroy => true
end
My model player.rb
class Player < ActiveRecord::Base
belongs_to :roster
end
My controller rosters_controller.rb
def new
@roster = Roster.new
@players = Player.all
End
My roster view
<%= form_for(@roster) do |f| %>
<% if @roster.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@roster.errors.count, "error") %> prohibited this roster from being saved:</h2>
<ul>
<% @roster.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :player_id %><br />
<%= f.text_field :player_id %>
<%= collection_select("roster", "player_id", @players, "id", "gname") %>
</div>
<div class="field">
<%= f.label :player_id %><br />
<%= f.text_field :player_id %>
<%= collection_select("roster", "player_id", @players, "id", "gname") %>
</div>
<div class="actions">
<%= f.submit %>
</div>
私はネストされた属性のパラダイムと競合しているようです。この例では、記事モデルへのネストされた属性としてコメントモデルを使用しています。コメントは記事に関連してのみ存在します。私は、player_idを名簿に関連させ、その名簿がなくてもプレーヤーを存在させたいと思います。したがって、アプリケーションの使用では、プレイヤーが最初に追加され、次にロスターが作成され、ロスターにあるプレーヤーが選択されます。いくつかの選手は選手名簿に載っていないだろう。あなたが私をまだ送ってくれた例はありますか?私はプレーヤーにアクセスする際に問題があります。 – RickO
あなたのモデルがどのように構造化されているかに関するコードで質問を更新してください。 –
遅く返事を申し訳ありません、私はあなたの返信を見ませんでした。私は別々のフィールドを期待していた。ここに私のコードです。私は多くの選手をIDでロスターテーブルに追加しようとしています。私の意見には今欠陥があることが分かっています。私は新しい選手フィールドでプレイヤーのIDが利用できるように多くのフィールドを持っていきたい、コレクションの選択ドロップダウンから選手を選択し、各入力フィールドを追加します。 – RickO