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这不是一个好主意。
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这不是一个好主意。