模型中的两个filelds,引用相同的模型

时间:2015-07-19 11:38:29

标签: ruby-on-rails ruby-on-rails-4 activerecord

我有Match模型,我有Player模型。 现在,我想添加Match两个字段,例如:playeroneplayertwo。 我希望playerone引用特定的Player对象,而playertwo也引用另一个Player对象。

我正在尝试这样的事情:

rails g model Match player:references

但这样我只能创建一个字段。我无法为此字段创建自定义名称。

或者我可以创建playerone:integer提交并放置此处玩家的ID(在控制器中)。但是可以吗?

1 个答案:

答案 0 :(得分:2)

如果你每场比赛总是只有2名球员,可以创建player_one_id:integer和player_two_id:整数字段。在匹配模型中,您将只有

has_one :player_one, class_name: 'Player', primary_key: :player_one_id
has_one :player_two, class_name: 'Player', primary_key: :player_two_id

然后您可以从表单中设置这些

<%= f.collection_select :player_one_id, Players.all, :id, :name %>
<%= f.collection_select :player_two_id, Players.all, :id, :name %>

或以编程方式

@match.player_one = Player.find(1)
@match.player_two = Player.find(2)

此模型的模型cmdline生成器看起来像这样

rails g model Match player_one_id:integer:index player_two_id:integer:index