如何使用我在Rails中创建的关联?

时间:2013-03-03 18:30:48

标签: ruby-on-rails

这感觉应该是非常明显的;对不起,如果是。

我在导轨中创建了两个支架:TeamsPlayers。工作没问题。我想将它们链接起来,因为Team有许多PlayersPlayers属于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 %>

1 个答案:

答案 0 :(得分:1)

您可能需要阅读此处的文档:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

您可以通过以下方式访问玩家的团队:

player.team

你可以通过以下方式访问球队的球员:

team.players

然后在视图中迭代这些玩家

team.players.each do |player|

end

您在模型中调用的类belongs_tohas_many等类方法将为您生成方法。

例如,belongs_to :team会生成:teamteam=(team)build_team(attributes)create_team(attributes)等...