0

「id」列からではなく、「linked_to」列からテーブル「Words」にアクセスしたい。

Railsによって作成されたINNERJOINクエリは、常にWordsテーブルのid列を検索します。

これが私がやりたいことです:

  • クラスポイントから、
  • 「linked_to」列への内部結合を実行します(私はすでに:foreign_keyを指定しています)
  • 「Linked_to」は「Words」テーブルで一意ではありません。これは、翻訳ごとに1行あるためです。
  • Wordsテーブルで現在の言語に対応する値をフィルター(選択)します(dictionnary = 1と仮定します)

INNERJOINの表説明

私の現在のモデル

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 は、主キーを使用して 2 つのモデル間の関係を作成します。モデルを再考してください。dictionary_id フィールドは単語に属していませんが、中間テーブルの追加フィールドです。中間テーブルを「修飾」すると、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 に答える