3 模型表关系红宝石在轨道上半凌乱



更新

可以吗?


Student
has_many: hosts
has_many: posts through :students

Post
belongs_to :host
belongs_to :student
Host 
has_many posts
has_many students through posts 

=

===========

我正在一个平台上工作,学生可以创建一个帐户并发布与他们一起生活的寄宿家庭的评论。

目前我有三个模型

学生模型、主机模型和帖子模型

我希望视图最终具有此显示的信息

房东

联系(来自房东模型),房东电话等(房东模特),在描述框中对此特定主机的评论(帖子)并由学生发布

这是我学生的一部分。

  has_many :posts
  has_many :hostfamilies

这是我的帖子的一部分.rb

belongs_to :student 
belongs_to :host

这是我的主机的一部分.rb

belongs_to :student
has_many :posts

我有两个测试页面,其中包含一些虚假数据

我的索引.html.erb在学生控制器下目前看起来像这样

发表者: <%= @student.first_name%> <%=@student.last_name %>
<br>
评论: 
<br>
<% @student.posts.each do |post| %>
  Post <%= post.id %>
  Message: <%= post.message %>
<br>
发表時間: <%= post.created_at %>
<% end %>

我的索引.html.erb在主机控制器下看起来像这样

房東: <%= @host.contact_person %><br>
房東號碼: <%= @host.contact_number %><br>
最近的巴士: <%= @host.nearest_bus %><br>
最近的火車站: <%= @host.nearest_transit %><br>
每月房租: <%= @host.cost %>  

到目前为止,它们都正常工作。

首先,我觉得我可以使用比belongs_to和has_many更好的表关联关系,因为这两者对我来说相对容易且非常简单。有没有更好的方法/更干净的方法来连接这 3 张桌子?我只是对如何连接这三张桌子有点困惑。我同时构建和学习轨道,所以我几乎没有优化表关联的经验。

好吧,

如果一个学生有很多主持人,而一个主持人有很多帖子,你可以尝试一个has_many:通过关系。 所以你会这样做

学生.rb

has_many :p osts, 通过 :hosts

查看导轨指南了解更多信息http://edgeguides.rubyonrails.org/association_basics.html#the-has-many-through-association

学生.rb

has_many :hosts
has_many :posts, through: hosts

主机.rb

belongs_to :student
has_many :posts

后.rb

belongs_to :student
belongs_to :host

通过这种方式,您可以获取属于特定主机的帖子,学生发布的所有帖子以及学生发布的有关主持人的所有帖子。

最新更新