1

更新

这个可以吗?


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 

=============

我正在开发一个平台,学生可以在该平台上创建帐户并发布对他们居住的寄宿家庭的评论。

目前我有三个模型

学生模型、宿主模型和后期模型

我希望视图最终有这个显示的信息

房东联系方式(来自房东模型)、房东电话等(房东模型)、描述框(帖子)中对该特定房东的评论并由学生发布

这是我的 student.rb 的一部分

  has_many :posts
  has_many :hostfamilies

这是我 post.rb 的一部分

belongs_to :student 

belongs_to :host

这是我的 host.rb 的一部分

belongs_to :student

has_many :posts

我有两个带有一些虚假数据的测试页

我的学生控制器下的 index.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 %>

我在hostscontroller下的index.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 张桌子?我只是对如何连接这三个表有点困惑。我同时在构建和学习 rails,所以我对优化表关联的经验很少。

4

1 回答 1

1

好吧,如果一个学生有很多主持人,而主持人有很多帖子,您可以尝试使用 has_many :through 之间的关系。所以你会做

学生.rb

has_many :posts,通过 :hosts

查看 Rails 指南了解更多信息 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

post.rb

belongs_to :student
belongs_to :host

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

于 2013-09-10T20:04:07.653 回答