轨道上的ruby中的关系数据库

use*_*579 1 ruby database-design ruby-on-rails relational-database

我正在创建一个幻想足球团队Web应用程序来学习如何在rails上使用ruby,我对关系数据库如何使用这种示例感到有些困惑.

我有一个用户,玩家,团队和My_Team的桌子.

class Player < ActiveRecord::Base
    belongs_to :team
    has_one :team
    has_and_belongs_to_many :my_team 
end

class Team < ActiveRecord::Base
    has_many :players
end

class MyTeam < ActiveRecord::Base
    belongs_to :user
    has_many :players
end
Run Code Online (Sandbox Code Playgroud)

这些是我制作的模型.我想知道我是否需要一个新课程来将它们联系在一起?我不太确定如何链接它们 - 我在一段时间内没有做任何需要关系数据库模型的事情!

我已经成功显示了所有数据,并且我为玩家和团队制定了一些虚拟日期,但我应该如何继续进行,以便一个用户拥有一个拥有众多玩家的用户团队?

这是正确的吗?

我正在尝试将某个播放器添加到某人的个人团队中,但我觉得因为桌面设计而无法正常工作.

Ric*_*eck 6

我正在尝试将某个播放器添加到某人的个人团队中,但我觉得因为桌面设计而无法正常工作

ob264 有点对:

#app/models/user.rb
Class User < ActiveRecord::Base
   has_many :teams
   has_many :players, through: :teams
end

#app/models/team.rb
Class Team < ActiveRecord::Base
   #fields id | user_id | other | team | details | created_at | updated_at
   belongs_to :user

   has_many :player_teams
   has_many :players, through: :player_teams
end

#app/models/player.rb
Class Player < ActiveRecord::Base
   #fields id | team_id | other | team | details | created_at | updated_at
   has_many :player_teams
   has_many :teams, through: :player_teams
end

#app/models/player_team.rb
Class PlayerTeam < ActiveRecord::Base
    belongs_to :team
    belongs_to :player
end
Run Code Online (Sandbox Code Playgroud)

这将允许您创建以下设置:

#config/routes.rb
resources :teams #-> domain.com/teams/5/edit

#app/controllers/players_controller.rb
Class TeamsController < ApplicationController
   def edit
       @team = Team.find params[:id]
       @team.player_teams.build
   end

   def update
       @team = Team.find params[:id]
       @team.update(team_params)
   end

   private

   def team_params
      params.require(:team).permit(:team, :params, player_teams_attributes: [:player_id, :team_id])
   end
end
Run Code Online (Sandbox Code Playgroud)

虽然这需要调整,但它基本上可以让你做到这一点:

#app/views/teams/edit.html.erb
<%= form_for @team do |f| %>
   <%= f.fields_for :player_teams do |pt| %>
      <%= pf.collection_select :player_id, Player.all, :id, :name %> #-> adds a player to your team
   <% end %>
   <%= f.submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

-

ActiveRecord协会

为了更深入地回答您的问题,您必须了解Rails使用的ActiveRecord关联的作用.ActiveRecord是用于数据驱动应用程序的"ORM"(对象关系映射器)层,允许应用程序层一起构建关联对象.

这里的区别在于,如果要在数据集中创建"关系"/"关联",则必须执行以下几项重要操作:

  1. 您需要了解foreign_keys数据表中的角色
  2. 您需要正确关联模型
  3. 您需要在对象级别工作

首先,您需要了解ActiveRecord不是魔术 - 它根据foreign_key数据表中的对象构建对象.这通常是对primary_key父对象的引用:

在此输入图像描述

这意味着每次在Rails中构建关联时,都需要使用foreign_keys查找相应数据所需的数据表对其进行备份.

其次,您需要确保模型正确关联.提供的示例充分证明了它应该如何工作(一旦你了解它就很简单!)

第三,你需要欣赏在对象层面工作.这非常重要--Rails(因为它是基于Ruby构建的)是一个面向对象的框架,这意味着你所做的一切都是基于对象(通过Models,从数据库构建)

我这样说是因为我为你构建方法的方式是面向对象的 - 你想要通过添加/删除关联中的玩家来更新用户的"团队"对象.这是在Rails中实现的一个非常重要的模式 - 如果你了解它是如何工作的,它将帮助你大量增加