0

我想从“linked_to”列而不是“id”列访问表“Words”。

Rails 创建的 INNER JOIN 查询总是在 Words 表中搜索 id 列。

这就是我想要做的:

  • 从类点来看,
  • 对“linked_to”列进行内部连接(我已经指定了:foreign_key)
  • “Linked_to”在“Words”表中不是唯一的,因为每个翻译只有一行
  • 在Words表中过滤(Select),对应我当前语言的值(假设dictionnary = 1)

INNER JOIN的表格说明

我现在的模特

class Word < ActiveRecord::Base
  has_and_belongs_to_many :points, :foreign_key => "linked_to"    
  belongs_to :dictionnary 
  attr_accessible :lang, :value, :dictionnary_id, :language_id, :linked_to
end

class Point < ActiveRecord::Base
    has_and_belongs_to_many :words, :association_foreign_key => "linked_to"     
    belongs_to :priority        
    attr_accessible :edited_by
end     
4

1 回答 1

1

这叫约定。:) 从您的设计开始,您创建了错误的关联。

has_and_belongs_to_many 在两个模型之间创建关系,因此使用它们的主键。重新考虑您的模型:dictionary_id 字段不属于 Words,而是中间表的附加字段。当您“限定”中间表时,您不能再使用 HASB。使用普通的中间表

WordPointsForDictionary:
belongs_to :word
belongs_to :point
belongs_to :dictionary

Word:
has_many :points, :through => :WordPointsForDictionary
has_many :wordpointsfordictionary

Point:
has_many :words, :through => :WordPointsForDictionary
has_many :wordpointsfordictionary

这样,您就消除了模型中的重复和丑陋的关系。清理主键关系,这将对您有很大帮助。

于 2012-10-11T09:42:45.373 回答