我来自Java背景,我们编写自己的查询或存储过程,直接处理低级数据库的东西。
我要通过AWDR第3版的书而无法掌握连接概念。
有人可以共享他们第一次访问Rails时使用的资源吗?
假设我想要一个Customer
表和Order
表。客户可以下多个订单。我的Customer
模型类也会包含:has_many order_id
如果我执行上述操作,是否会在实际数据库中创建外键/主键?
现在让我们说我想找到所有订购了ID为5的客户。
我将如何做到这一点?
与find_by_sql
一起使用是否合适?
答案 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体验,不必处理所有低级管道是很好的。