2

私は2つのモデルを持っています:

class Sentence < ActiveRecord::Base
  attr_accessible :sentence_id, :authority_name #...
end

class Rule < ActiveRecord::Base
  attr_accessible :description, :headline, :note, :sentence_id
end

この疑似SQLコードのように動作するbelongs_to :sentence関連付けを作成する方法を知りたいです。Rule

SELECT * FROM rules 
INNER JOIN sentences ON rules.sentence_id = sentences.sentence_id;

編集:

そんなものを手に入れたい

rule = Rule.find 797 
# we all know how SQL query will look like...
rule.sentence  
# => SELECT * FROM sentences 
     INNER JOIN rules ON rules.sentence_id = sentences.sentence_id 
     WHERE rules.id = 797
4

2 に答える 2

5

まず、テーブルsentence_idの主キーですか?sentences

その場合は、その列を主キーとして明示的に設定する必要があります。

class Sentence < ActiveRecord::Base
  set_primary_key :sentence_id
end

class Rule < ActiveRecord::Base
  belongs_to :sentence
end

が主キーでない場合sentence_idは、関連付けの「主キー」として指定する必要があります。コードをテストする機会がありませんでしたが、次のようになります。

class Rule < ActiveRecord::Base
  belongs_to :sentence, :primary_key => :sentence_id
end
于 2012-05-08T14:02:34.000 に答える
0

リレーショナルデータベース理論では、外部キーは常にキーに移動します。必要なSQLを生成するためのアクティブレコードを取得するには、主キーを設定します。

class Sentence < ActiveRecord::Base
  set_primary_key :sentence_id

私はそれがあなたが望むものだと思いますが、ここに代替案があります。カスタム結合を行うには、joins()メソッドを使用して、SQLに必要な文字列を指定します。

于 2012-05-08T14:18:10.660 に答える