通过相关的外键与轨道上的ruby关联两个模型

时间:2013-09-03 16:03:03

标签: ruby ruby-on-rails-3 foreign-keys associations relationship

我在设置关系和查询方面遇到了麻烦。这是对我想要完成的事情的简单解释。假设我有三个模型:图纸,更改和修订。

绘图有很多修订

变更有很多修订

通过修订,变更有很多图纸

图纸包含主键字段和字符串:drawing_number,每个图形都是唯一的。

当我创建一个新的Change时,我有一个嵌套的表单,可以在Change中创建新的Revisions。我希望新版本中的一个字段是drawing_number,即使外键是drawing_id。有没有办法设置它以便我在表单中输入drawing_number,然后找到与drawing_id匹配的drawing_number,并将drawing_id添加到{{1}}修订表中的drawing_id列。

换句话说,我想使用不是外键的关联字段将修订与图纸联系起来。

例如:我有drawing_id = 7和drawing_number = A7114B1

我创建了一个新的Change,其中嵌入了一个Revision表单。我在表单中输入drawing_number A7114B1,但Revision模型只有一个drawing_id列,而不是drawing_number列。我希望逻辑找到与drawing_number匹配的drawing_id,并将drawing_id放入Revisions表中。

1 个答案:

答案 0 :(得分:1)

假设drawing_number == drawing_id

如果我理解得很清楚,您的数据已经正确建模,但您希望在Drawing上为您的属性名称添加别名。这可以通过#alias_attribute

完成
class Drawing < ActiveRecord::Base
  alias_attribute :drawing_number, :drawing_id
end

现在,您可以使用drawing_number完全按照drawing_id的方式使用> Drawing.where(drawing_id: 1) == Drawing.where(drawing_number: 1) => true ,例如:

drawing_number

假设drawing_id!= Drawing

我假设number具有属性Revisiondrawing_number具有属性class Drawing < ActiveRecord::Base has_many :revisions, foreign_key: :drawing_number, primary_key: :number end cass Change < ActiveRecord::Base has_many :revisions end class Revision < ActiveRecord::Base belongs_to :drawing, foreign_key: :drawing_number belongs_to :change end ,两者都是字符串。您需要手动设置关联的foreign_key和primary_key,如下所示:

{{1}}