我有两种模式:
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
答案 0 :(得分: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
答案 1 :(得分:0)
在关系数据库理论中,外键 始终 转到主键。要获取活动记录以生成所需的SQL,请设置主键。
class Sentence < ActiveRecord::Base
set_primary_key :sentence_id
我认为这就是你想要的,但这里有另一种选择。要执行自定义连接,请使用joins()方法并在SQL中提供所需的字符串。