0

我在设置关系和查询时遇到问题。这是我想要完成的简单说明。假设我有三个模型:图纸、更改和修订。

一张图纸有很多次修订

A Change 有许多 Revision

A Change 有很多经过修改的图纸

绘图具有主键字段和字符串:drawing_number每个绘图都是唯一的。

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

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

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

我创建了一个新的更改,其中嵌套了一个修订表单。我在表格中输入了drawing_number A7114B1,但Revision 模型只有drawing_id 列,没有drawing_number 列。我希望逻辑找到与drawing_number 匹配的drawing_id,并将drawing_id 放入Revisions 表中。

4

1 回答 1

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有属性numberRevision有属性drawing_number,两者都是字符串。您需要手动设置关联的foreign_key和primary_key,如下所示:

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
于 2013-09-03T16:35:30.957 回答