我正在使用Rails在我的表之间生成HABTM关系。我的表格名称为canvas
,但canvas.singularize
会生成canva
,这不是正确的字词。所以我在config/initializers/inflections.rb
中做了一些更改:
inflect.irregular 'canvas', 'canvases'
这是我的迁移:
create_table :canvases do |t|
end
create_table :questions do |t|
end
create_join_table :canvases, :questions do |t|
t.index :question_id
t.index :canvas_id
end
但是,在控制台中运行CanvasQuestion.find_by_canvas_id_and_question_id(1,1)
会产生此错误:
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "canvas_questions"
does not exist LINE 5: WHERE a.attrelid = '"canvas_questions"'::regc...
在我看来,ActiveRecord正试图找到表canvas_questions
而不是canvases_questions
。现在,我要使用Gem composite_primary_keys
并更改我的模型以使其正常工作:
class CanvasQuestion < ActiveRecord::Base
self.table_name = 'canvases_questions'
self.primary_keys = :canvas_id, :question_id
end
有没有正确的方法来解决这个问题?因为我现在正在考虑这个错误,因为ActiveRecord将CanvasQuestion翻译为canvas_questions
而不是canvases_questions
,即使我已将canvas
字变换改为{ {1}}
答案 0 :(得分:1)
问题在于CanvasQuestion.find_by_canvas_id_and_question_id(1,1)
,您无法使用 HABTM join-table
进行查询,因为 模型 join-table 不应该存在。
来自API doc
联接表不应包含主键或模型 用它。
我在我的项目中测试了你的代码,当我运行CanvasQuestion.find_by_canvas_id_and_question_id(1,1)
时
NameError: uninitialized constant CanvasQuestion
所以 Rails 正在寻找 类 CanvasQuestion
强>哪个不存在。
我的建议是使用 has_many :through
。从指南中查看此Choosing between Habtm
and has_many :through
。它会对你有所帮助。