2

我有两个模型:

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

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

我想知道如何创建belongs_to :sentence关联,Rule其行为类似于此伪 SQL 代码:

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 回答