Ruby on Rails:在同一个表中使用两次外键?

时间:2016-12-14 13:58:11

标签: mysql ruby-on-rails ruby foreign-keys

我有两种模式:

class Word < ApplicationRecord
  has_many :g_words, class_name: 'Translation', foreign_key: 'g_id'
  has_many :v_words, class_name: 'Translation', foreign_key: 'v_id'
end

class Translation < ApplicationRecord
  belongs_to :g, class_name: 'Word', required: true
  belongs_to :v, class_name: 'Word', required: true
end

表格翻译

t.text "note", limit: 65535
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer  "g_id"
t.integer  "v_id"

在表格单词中,我已插入2个值:

id     body
1      Home
2      Maison

当我使用

创建新的翻译时
g_id     v_id
1        2

然后出现以下错误。 enter image description here

在互联网上搜索关于我的问题的很多内容,这里有一篇关于我想要实现的内容的帖子:http://www.emreakkas.com/ruby-on-rails/rails-multiple-columns-to-the-same-tables-key

我试图实施并失败了。

我不知道我是否错误地实现了关联,或者我声明了错误的外键。我真的不知道从哪里开始发现错误。我希望你能帮帮我!谢谢!

1 个答案:

答案 0 :(得分:1)

如果您想构建一个翻译表,您可以这样做:

class Word < ApplicationRecord
  has_many :translations
  has_many :languages, through: :translations
end

class Language < ApplicationRecord
  has_many :translations
  has_many :words, through: :translations
end

class Translation < ApplicationRecord
  belongs_to :language
  belongs_to :word
end

但是Rails已经有了a built in i18n API来处理翻译,你应该在重新发明轮子之前先看一下。