最能解释Rails中使用的关联的资源

时间:2010-01-19 01:06:35

标签: ruby-on-rails

我来自Java背景,我们编写自己的查询或存储过程,直接处理低级数据库的东西。

我要通过AWDR第3版的书而无法掌握连接概念。

有人可以共享他们第一次访问Rails时使用的资源吗?

假设我想要一个Customer表和Order表。客户可以下多个订单。我的Customer模型类也会包含:has_many order_id

如果我执行上述操作,是否会在实际数据库中创建外键/主键?

现在让我们说我想找到所有订购了ID为5的客户。

我将如何做到这一点?

find_by_sql一起使用是否合适?

3 个答案:

答案 0 :(得分:2)

查看http://guides.rubyonrails.org/association_basics.html

它对Rails关联有很好的解释,它们如何工作,为什么需要它们,以及如何使用它们。

答案 1 :(得分:1)

我想我可以给你一个快速的破坏。

你习惯于直接处理SQL,好的是Rails提升了良好的数据库设计。如果您有一个书籍表和一个章节表,那么一本书有很多章节,对吗?就像在其他数据库设置中一样,章节表应该有一个外键,告诉它属于哪本书。

假设您在章节表中有这个外键,您可以像这样设置您的Book模型:

# app/models/book.rb
class Book < ActiveRecord::Base
  has_many :chapters
end

你告诉Rails,一本书确实有很多章节。因此,如果您有一个书籍对象,您可以说book.chapters,这将返回属于本书的章节对象的数组。 Rails将知道查看book_id外键的章节表,不需要自定义SQL。

相反,假设使用相同的数据库设置,您可以将章模型定义为与书籍相关联,如下所示:

# app/models/chapter.rb
class Chapter < ActiveRecord::Base
  belongs_to :book
end

注意:book这里是单数,只是一个有助于提高可读性的习语,因为一章只能属于一本书。现在,如果您有一个章节对象并说出chapter.book,它将返回该章所属的书籍对象。

与其他数据库应用程序一样,外键始终位于“属于”表中。

我希望这有帮助!

答案 2 :(得分:0)

正如所建议的那样 Ruby On Rails指南是一个很好的起点,以及RailsCast site

关键是外键虽然是使用ActiveRecord抽象(例如:belongs_to, :has_many, :has_and_belongs_to_many等)所暗示的,但为您创建。在Associations的Rails指南说明中,您会注意到以下评论:

  

“在任何情况下,Rails都不会为您创建外键列。您需要明确定义它们作为迁移的一部分。”

本说明通常在:foreign_key选项下的各个关联的详细信息中引用。

我想这通常不是很明显,根据我的经验(特别是来自Java / C ++背景),我发现我必须打印并阅读这些指南几次以真正欣赏优雅,简洁如以及其中包含的丰富信息。

另一方面 - 根据Java体验,不必处理所有低级管道是很好的。