1

基本的な Rails アプリケーションを作成しようとしています。generate を使用して基本的なスキャフォールドを作成し、プレイヤーとチームの間の belongs_to 関係を設定して、プレイヤーが Team に所属し、Team に多くのプレイヤーがいるようにしました。

私のフォームビューは次のようになります

<%= form_for(@team) do |f| %>
  <% if @team.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@team.errors.count, "error") %> prohibited this team from being saved:</h2>

      <ul>
      <% @team.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :Playerone %><br />
    <%= f.collection_select :Playerone, Player.all, :firstname, :firstname %>
  </div>

  <div class="field">
    <%= f.label :Playertwo %><br />
    <%= f.collection_select :Playertwo, Player.all, :firstname, :firstname %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

新しいチームを作成しようとすると、プレイヤーの名前を選択したいドロップダウンが表示されますが、保存するとレコードとして 0 が保存されます。

チームのリスト

Playerone Playertwo
0 0 Show Edit Destroy

新しいチーム

もともと私はこのようにコレクションを選択していました <%= f.collection_select :Playertwo, Player.all, :id, :firstname %> これはIDを挿入しますが、代わりにテキストを挿入したいです。

私は膨大な量のドキュメントに目を通し、まだ学んでいるので切り札を見つけました。

助けてくれてありがとう:)

4

1 に答える 1

3

次に、移行によって異なります。データベースに整数フィールドを作成した場合、文字列を保存すると 0 が保存されます。

(a) 整数の代わりに文字列を使用するように移行を変更できます。

(b) ID を使用し、名前を検索して名前を表示できます。

f.collection_select :Playertwo, Player.all, :id, :firstname

チームの名前は、begins_to playerone と playertwo から取得できます。

class Team
  belongs_to :playerone, :class_name => "Player"
  belongs_to :playertwo, :class_name => "Player"
end

<%= team.playerone.firstname %>

または、ファーストネームをプレイヤーに委任することもできます。

class Team
  belongs_to :playerone, :class_name => "Player"
  belongs_to :playertwo, :class_name => "Player"
  delegate :firstname, :to => :playerone, :prefix => true, :allow_nil => true
  delegate :firstname, :to => :playertwo, :prefix => true, :allow_nil => true
end

<%= team.playerone_firstname %>

または、(c) 整数を使用する belongs_to を使用することもできます。ドキュメントを参照して ください http://guides.rubyonrails.org/getting_started.html

于 2012-04-21T15:40:25.700 に答える