这感觉应该是非常明显的;对不起,如果是。
我在导轨中创建了两个支架:Teams
和Players
。工作没问题。我想将它们链接起来,因为Team
有许多Players
和Players
属于Team
。所以我进入各自的模型并创建了关联。我四处看看,发现我必须在Players
中创建一个新列以容纳外键,所以我通过迁移做到了这一点。我将其称为team_id
并更新了我创建的5条记录中的4条,以提供1
的ID。基本上,this answer指示了什么。
我现在不明白的是,我该如何使用该关联?那么,为了得到一个具体的例子,我如何根据该团队的ID列出Players
的show.html.erb模型中的所有Team
?我需要以某种方式在我的控制器中调用Players
吗?
架构:
ActiveRecord::Schema.define(:version => 20130303052538) do
create_table "players", :force => true do |t|
t.string "position"
t.integer "number"
t.integer "grade"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "first_name"
t.string "middle_name"
t.string "last_name"
t.integer "team_id"
end
create_table "teams", :force => true do |t|
t.string "name"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
end
模型(为了简洁而将它们集中在一起):
class Player < ActiveRecord::Base
attr_accessible :grade, :first_name, :middle_name, :last_name, :number, :position, :team_id
# Relationships
belongs_to :team
end
class Team < ActiveRecord::Base
attr_accessible :name
# Relationships
has_many :players
end
我的Team
控制器的一部分:
class TeamsController < ApplicationController
def show
@team = Team.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @team }
end
end
end
查看:
<p id="notice"><%= notice %></p>
<p>
<b>Name:</b>
<%= @team.name %>
<%= @team.id %>
</p>
<p>
<b>Players:</b>
# I want to list them here.
</p>
<%= link_to 'Edit', edit_team_path(@team) %> |
<%= link_to 'Back', teams_path %>
答案 0 :(得分:1)
您可能需要阅读此处的文档:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
您可以通过以下方式访问玩家的团队:
player.team
你可以通过以下方式访问球队的球员:
team.players
然后在视图中迭代这些玩家
team.players.each do |player|
end
您在模型中调用的类belongs_to
和has_many
等类方法将为您生成方法。
例如,belongs_to :team
会生成:team
,team=(team)
,build_team(attributes)
,create_team(attributes)
等...