我一直在尝试创建一个基本的rails应用程序。我使用generate来创建一个基本的脚手架,我在玩家和团队之间设置了belongs_to关系,因此玩家属于团队和团队拥有很多玩家。
我的表单视图如下所示
<%= 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,但我想要插入文本。
我已经查看了大量的文档,并且在我还在学习的时候已经取得了成功。
感谢您的帮助:)
答案 0 :(得分:3)
然后这取决于您的迁移。如果在数据库中创建了整数字段,则保存字符串将保存为0。
您可以(a)将迁移更改为使用字符串而不是整数。
你可以(b)使用id,并通过查找名称来显示名称。
f.collection_select :Playertwo, Player.all, :id, :firstname
您可以从团队belongs_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