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,ProfileExperience
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和模型结构来解决它,但这在我的结构方面并不好。 也许你有个主意。
谢谢
答案 0 :(得分:1)
这不是一个好的领域模型。
如果您想要翻译表,您可以这样做:
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
你应该更关心创造有意义的关系和重复而不是“我不想要另一个班级,等等”,这是选择HABTM的最常见原因。
当Rails中的“命名空间”模型时,模块应该是复数:
好:Titles::Translation
不好:Title::Translation
这个约定是由于ActiveRecord将表映射到表到类的方式,以及将模型嵌套到另一个模型类中的事实并不是一个好主意。