1

我的理解是表之间的关系是通过外键实现的。但是当您添加模型之间的关联(belongs_to 等)时,数据库架构没有变化。这是为什么?Rails 如何真正知道存在关联或关系?

4

2 回答 2

0

这里的技巧是,belongs_to、has_one、has_many 仅在适当的键已经在数据库中时才有效。

键通常是<model>_id.

因此,post 和 blog 之间的 belongs_to 关系要求您在您必须使用关系创建的 posts 表中有一个 blog_id。

博客和帖子之间的 has_many 也是如此。

class Blog < ActiveRecord::Base
  has_many :posts
end

blog_id需要在帖子表中创建外键的迁移。

于 2012-12-13T10:19:58.983 回答
0

Rails 将通过仅在模型中提及这些关系来识别所有表之间的关联,但不仅限于外键。如果您不遵循外键的命名约定,即使您在模型中提及关系,rails 也会丢失表之间的关系。然后你必须明确地告诉foreign_key和类名。

class Article < ActiveRecord::Base
 has_many :comments
end 


class Comment < ActiveRecord::Base
 belongs_to :article
end

在注释表中,您必须维护article_id连同它自己的字段。
然后 rails 会自动假定article_idforiegn_key.
如果你写别的东西(例如:)art_idarticle_id你必须告诉:

class Comment < ActiveRecord::Base
 belongs_to :article, :class_name=>"Article", :foreign_key=>:art_id
end
于 2012-12-13T10:24:51.827 回答