1

我一直在尝试创建一个基本的 Rails 应用程序。我使用 generate 创建了一个基本的脚手架,并在球员和球队之间建立了 belongs_to 关系,所以球员 belongs_to 球队和球队 has_many 球员。

我的表单视图看起来像这样

<%= 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 显示编辑销毁

新团队

最初我有这样的集合选择 <%= 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

您可以从所属队伍中获取名称,该名称属于 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 回答