【问题标题】:Rails association troubleRails 关联问题
【发布时间】:2015-02-22 08:52:22
【问题描述】:

我有 3 个对象:PlayerTeamUser

# user.rb
has_one :player, dependent: :destroy
has_many :teams, dependent: :destroy
# team.rb
belongs_to :user
# player.rb
belongs_to :user

我的问题在于playerteam 的关联:

  • 一个团队应该有很多并且属于很多玩家
  • 一个玩家应该有很多并且属于很多团队

这样我就可以通过player.teamsteams.players 访问它们

进一步,我需要在未来向团队添加/删除玩家,所以基本上添加连接(Join Table)。

对此最好的方法是什么? TeamsController 上的 create Action 是什么样的。

用例

  • 很多Player注册
  • 一个Player 创建一个Team
  • 一个Team由8个Players组成
  • 因此,所有者将来会添加更多Players

这就是问题所在,我该如何处理PlayersTeams 之间的连接

【问题讨论】:

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


    【解决方案1】:

    在不了解用例的情况下,无法判断您是否正确定义了关联。所以我无法建议最好的方法。用例是什么?视图是什么样的?

    【讨论】:

    • 好吧,我根本没有定义关联 :) 那是我的问题,因为我寻求帮助。我用用例更新了我的问题。
    【解决方案2】:

    你为什么不试试 has_and_belongs_to_many 关联?

    更新:

    1. 首先你必须创建一个连接表:

      class CreatePlayersTeamsJoinTable < ActiveRecord::Migration
        def change
          create_table :players_teams, id: false do |t|
            t.integer :player_id
            t.integer :team_id
          end
        end
      end
      
    2. 然后定义关联 播放器.rb: has_and_belongs_to_many :teams 团队.rb: has_and_belongs_to_many :players

    3. 在您的 TeamsController 中,我将使用嵌套属性并从视图中传递 player_ids

    希望对你有帮助

    【讨论】:

    • 这不是 Bajena 的答案,但正是我需要帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多