【问题标题】:How to join two tables in Active Record by looking up non-primary-key columns from both tables? [duplicate]如何通过从两个表中查找非主键列来连接 Active Record 中的两个表? [复制]
【发布时间】:2021-05-19 23:18:45
【问题描述】:

我有三个具有以下结构的表:

CREATE TABLE `crawled_data` (
  `id` int NOT NULL,
  `url` longtext,
  ***OMMITTED***
  PRIMARY KEY (`id`)
);
CREATE TABLE `ingredient_frequency` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `url_id` int DEFAULT NULL,
  `url` text,
  ***OMMITTED***
  PRIMARY KEY (`id`)
)

CREATE TABLE `url_metadata` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `url` longtext,
  ***OMMITTED*** 
  PRIMARY KEY (`id`)
);

我定义了以下活动记录结构:

class Crawled_Data < ActiveRecord::Base
  self.table_name = "crawled_data"
  has_many :url_metadatas
end

class Ingredient_Frequency < ActiveRecord::Base
  self.table_name = "ingredient_frequency"
  belongs_to :url_metadata
end

class Url_Metadata < ActiveRecord::Base
  self.table_name = "url_metadata"
  has_many :ingredient_frequencies
  belongs_to :crawled_data
end

我应该如何通过匹配 url 列(不是两个表中的主键)继续加入 crawled_data 和 url_metadata?

我查看了以下线程但没有运气,因为答案并没有真正提到如何引用当前表的列(而只是谈论引用 foreign_key)

How to join tables with no primary key in rails?

【问题讨论】:

标签: mysql ruby-on-rails mariadb rails-activerecord


【解决方案1】:
class Crawled_Data < ActiveRecord::Base
  self.table_name = "crawled_data"
  has_many :url_metadatas, primary_key: 'url', foreign_key: 'url'
end

class Ingredient_Frequency < ActiveRecord::Base
  self.table_name = "ingredient_frequency"
  belongs_to :url_metadata, primary_key: 'url', foreign_key: 'url'
end

class Url_Metadata < ActiveRecord::Base
  self.table_name = "url_metadata"
  has_many :ingredient_frequencies, primary_key: 'url', foreign_key: 'url'
  belongs_to :crawled_data, primary_key: 'url', foreign_key: 'url'
end

然后:Crawled_Data.joins(:url_metadatas)

【讨论】:

    猜你喜欢
    • 2019-05-18
    • 2013-01-25
    • 2019-06-25
    • 2018-08-17
    • 1970-01-01
    • 2016-07-14
    • 2020-02-29
    • 2011-01-28
    • 2018-02-05
    相关资源
    最近更新 更多