has_and_belongs_to_many table_name_prefix 问题

has_and_belongs_to_many issue with table_name_prefix

ich 想寻求一些关于 has_and_belongs_to_many 协会的帮助。

我有以下表格和模型:

candidate_job_title_translations -> Candidate::JobTitleTranslation(在 table_name_prefix 的子文件夹中)

create_table "candidate_job_title_translations", force: :cascade do |t|
end

profile_experiences,个人资料经验

create_table "profile_experiences", id: :serial, force: :cascade do |t|
end

candidate_job_title_translations_profile_experiences, 无型号

create_table "candidate_job_title_translations_profile_experiences", id: false, force: :cascade do |t|
    t.bigint "candidate_job_title_translation_id", null: false
    t.bigint "profile_experience_id", null: false
end

两个模型设置为关联:

class ProfileExperience < ApplicationRecord
   has_and_belongs_to_many :candidate_job_title_translations, class_name: 'Candidate::JobTitleTranslation'
end

class Candidate::JobTitleTranslation < ApplicationRecord
   has_and_belongs_to_many :profile_experiences, class_name: 'ProfileExperience'
end

我现在的问题是,我收到一个 ActiveRecord 错误,说 job_title_translation_id 不存在,这是正确的。它应该寻找 candidate_job_title_translation_id

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column candidate_job_title_translations_profile_experiences.job_title_translati
on_id does not exist
LINE 1: ...ces" ON "candidate_job_title_translations"."id" = "candidate...

我觉得我可以通过没有 table_name_prefix 和模型结构来解决它,但是,就我的结构而言,这并不好。 也许你有想法。

谢谢

这并不是一个好的领域模型。

如果你想要翻译 table 你想做这样的事情:

class Position
  belongs_to :title
  has_many :translated_titles, 
    through: :title,
    source: :translations
end

class Title
  has_many :positions
  has_many :translations, 
    class_name: 'Titles::Translation'
end

class Titles::Translation
  belongs_to :title
end

您应该比 "I don't want to have another class, waaah" 更关心创建有意义的关系和重复,这是选择 HABTM 的最常见原因。

此外,当 "namespacing" 模型在 Rails 中时,模块应该是复数:

好:Titles::Translation
差:Title::Translation

此约定是由于 ActiveRecord 将 tables 映射到 tables 再到 classes 的方式以及将模型嵌套在另一个模型中的事实 class这不是一个好主意。