我的理解是表之间的关系是通过外键实现的。但是当您添加模型之间的关联(belongs_to 等)时,数据库架构没有变化。这是为什么?Rails 如何真正知道存在关联或关系?
问问题
47 次
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_id
为foriegn_key
.
如果你写别的东西(例如:)art_id
,article_id
你必须告诉:
class Comment < ActiveRecord::Base
belongs_to :article, :class_name=>"Article", :foreign_key=>:art_id
end
于 2012-12-13T10:24:51.827 回答