Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 这是否应该是一个多:通过关联?_Ruby On Rails_Database Design_Relational Database_Has Many Through - Fatal编程技术网

Ruby on rails 这是否应该是一个多:通过关联?

Ruby on rails 这是否应该是一个多:通过关联?,ruby-on-rails,database-design,relational-database,has-many-through,Ruby On Rails,Database Design,Relational Database,Has Many Through,一篇文章属于一个用户,而一个用户有许多文章。 一篇文章也属于一个主题,一个主题有许多文章 class User < ActiveRecord::Base has_many :posts end class Topic < ActiveRecord::Base has_many :posts end class Post < ActiveRecord::Base belongs_to :user belongs_to :topic end class用户

一篇文章属于一个用户,而一个用户有许多文章。
一篇文章也属于一个主题,一个主题有许多文章

class User < ActiveRecord::Base
  has_many :posts
end

class Topic < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
   belongs_to :user
   belongs_to :topic
end
class用户
这很简单,也很容易设置,但是当我显示一个主题时,我不仅需要该主题的所有帖子,还需要制作该帖子的用户的用户名和照片。但是,这些属性存储在用户模型中,与主题无关。那么我该如何设置它呢

可能已经可以调用它了,因为Post模型有两个外键,一个用于用户,一个用于主题

或者,也许这是一种“单向”的交往方式。与Post类似的是join模型,一个主题将有许多:users,:through=>:posts。但事实并非如此。就像用户没有很多:主题一样

那么这是否需要有很多:尽管关联?我想我只是有点困惑,控制器对于给定主题同时调用帖子和帖子的用户会是什么样子


编辑:说真的,谢谢你的关心。我选择tal的答案是因为我用他的代码作为我的控制器;然而,我可以很容易地选择j.或tim的。也谢谢你们两位。这真是太简单了。我想今天可能标志着我对rails的爱的开始。

在显示主题及其帖子时,你可以获得
用户名和
用户照片

比如:

@topic.posts.each do |post|
   user_name = post.user.name
   user_photo = post.user.photo
end

很简单。如果我没有很好地理解您的问题,很抱歉。

在显示主题及其帖子时,您可以获取
用户名和
用户照片

比如:

@topic.posts.each do |post|
   user_name = post.user.name
   user_photo = post.user.photo
end

很简单。抱歉,如果我没有很好地理解您的问题。

好吧,如果您想显示文章作者的用户名,例如,您可以执行以下操作(未测试,但应该可以):

它应该为所有帖子生成一个请求,为用户生成一个请求,帖子集合应该有用户

在视图中(此处为haml):


例如,如果您希望显示文章作者的用户名,您可以执行以下操作(未测试,但应该可以正常工作):

它应该为所有帖子生成一个请求,为用户生成一个请求,帖子集合应该有用户

在视图中(此处为haml):


如果我没弄错你的问题,不,这里不需要通过联想

如果您想显示在某个主题中发布的所有用户的列表(跳过帖子信息),那么它会很有帮助


不过,为了防止n+1查询,您可能希望从帖子中快速加载用户。

如果我正确理解您的问题,不,这里不需要通过关联

如果您想显示在某个主题中发布的所有用户的列表(跳过帖子信息),那么它会很有帮助


不过,为了防止n+1查询,您需要从帖子中快速加载用户。

Hi Tim,您能详细说明一下吗。你说有很多:通过协会是不需要的,但后来说会有帮助。但我相信你的意思是,只有在我不想要实际的帖子的情况下,你才会这么做。对吗?因此,使用tal发布的控制器代码是完成此任务的最佳/最快的查询?嗨,Tim,你能详细说明一下吗。你说有很多:通过协会是不需要的,但后来说会有帮助。但我相信你的意思是,只有在我不想要实际的帖子的情况下,你才会这么做。对吗?因此,使用tal发布的控制器代码是完成此任务的最佳/最快查询?
- @posts.each do |post|
  = post.user.name
  = post.body