【问题标题】:Model Associations matching 2 Keys匹配 2 个键的模型关联
【发布时间】:2025-12-08 02:20:03
【问题描述】:

2 个型号 => TownIsland

# Town.rb
belongs_to :player
belongs_to :island

# Island.rb
has_many :towns

连接通过 2 个不同的整数变量发生

:island_x 
:island_y

e.g. :island_x => 34 :island_y => 43

如何设置这个关联?


# CreateIslands
    create_table :islands, id: false do |t|
      t.primary_key :grepo_id
      t.integer :island_x
      t.integer :island_y
      t.integer :type_number
      t.integer :available_towns

      t.timestamps
    end

# CreateTowns
    create_table :towns, id: false do |t|
      t.primary_key :grepo_id
      t.integer :player_id
      t.string :name
      t.integer :island_x
      t.integer :island_y
      t.integer :slot
      t.integer :points

      t.timestamps
    end

【问题讨论】:

  • 您想将它们设置为自定义外键吗?
  • 我发布了我的答案。这是你想要的吗?

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


【解决方案1】:

类似的东西

Class Town < ActiveRecord::Base

belongs_to :player
belongs_to :island ,foreign_key :island_x

end

更新

我发现island_xisland_yschemas 中都没有使用。您可以在towns 表中使用普通的foreign_key island_id,您可以拨打电话@987654328 @ 或island.towns

更新1

上面的foreignn_key搞错了。你可以只做一个方法,像这样进行匹配

def some_method

@island_x = Island.find(params[:island_x])

@island_y = Island.find(params[:island_x])

@town_x = Town.where(:island_x => @island_x.id)

@town_y = Town.where(:island_y => @island_y.id)

end

【讨论】:

  • 问题是很多城镇都有相同的 island_x 值,但没有 island_y。我需要 x 和 y 的完全匹配。我应该创建一个包含加入这两个变量并将其用作键的新变量吗?
  • @The Mini John 你想要与 island_x 和 island_y 匹配的城镇吗?
  • 反之亦然。连接键是 island_x 和 island_y。我需要打电话给 town.island 或 island.towns。
  • @TheMiniJohn 好的。向我展示岛屿和城镇的架构。将其发布在问题中。
  • island_id 是Islands 中的:grepo_id 也是primary_key。这些变量是从游戏 API 中提取的,这就是我得到的变量。 ://
最近更新 更多