[英]Rails: How can I access the parent model of a new record's nested associations?
[英]What's the point of having foreign keys if Rails can access other model's attributes through associations anyways?
我是Rails的初学者(到目前为止一直很喜欢)。 我不确定这是否是一个愚蠢的问题。 据我所知,例如,这样的外键:名为Micropost的模型中的user_id
会将微帖子与User模型的ID关联。 像这样:
因此,您可以执行以下操作: <%= micropost.user_id %>
以获取创建微博的用户的ID。
但也可以这样做: <%= micropost.user.id %>
因为Rails可以通过has_many
和belongs_to
关联模型。
micropost.user.username
起作用? 外键用于幕后使Rails关联正常工作,而没有它们,这些关联就无法工作。 您可以通过将.to_sql
附加到关系中来查看此信息,例如:
> Blog.first.articles.to_sql
=> "SELECT `articles`.* FROM `articles` WHERE `articles`.`blog_id` = 42"
在这种情况下,它使用blog_id
外键查询articles
关联。
不必索引外键,但这是一个好主意,并且可以提供更好的性能。
因此,我想知道,如果Web框架无论如何仍可以通过关联访问其他模型的属性,为什么在Rails应用程序中需要外键?
外键(以及主键计数器部分)将模型链接在一起。 如果您没有user_id
,您将如何知道它最终与哪个user
关联?
有必要对它们建立索引并提高数据库性能吗?
对于性能,我发现这种做法很有帮助。
还是它们有必要使诸如此类的东西:micropost.user.username起作用?
仅在上下文中有必要找到micropost
的关联user
您需要知道它是哪个user
。
最关键的事情,了解有关user
VS user_id
在你的模型是user_id
是外键,并且user
是一个实例 User
(例如,它的模型对象)。
没有user_id
,Rails无法为您选择正确的user
。
请注意,如果您没有预加载关联,则只需使用用户ID(例如,用于构建URL),使用micropost.user_id
速度将比micropost.user.id
更快,因为rails不需要实例化User
对象只是为了检索ID。
通过调用micropost.user_id,Rails为您提供了microposts表的user_id列的条目。 通过调用micropost.user.id,Rails从micropost中获取user_id列,并“搜索”具有相应ID的Users。 当您没有user_id时,Rails不会对两个表之间的相关性一无所知。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.