2013-09-10 6 views
1

Обновлено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 

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

Я работаю на платформе, где студенты могут сделать обзоры учетной записи и пост принимающих семей, где они жили с.

В настоящее время у меня есть три модели

студент модель, модель хозяин, и после модели

Я хочу посмотреть в конечном счете, эта информация, отображаемая

домовладелец контакт (от модели хоста) , хозяин телефона и т.д. (модель хоста), обзор этого конкретного хоста в поле описание (пост) и отправил студент

Это часть моего 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 под studentcontroller в настоящее время выглядит так

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

и мой index.html.erb под hostscontroller выглядеть следующим образом

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

до сих пор оба они работают правильно.

Прежде всего, я чувствую, что могу использовать лучшее соотношение ассоциаций таблиц, чем просто own_to и has_many, потому что эти два относительно легко для меня и довольно прямолинейны. Есть ли лучший способ/более чистый способ подключения этих трех таблиц? Я просто немного смущен тем, как подключить эти три таблицы. В то же время я строю и изучаю рельсы, поэтому у меня очень мало ассоциаций таблицы оптимизации опыта.

ответ

1

Хорошо, если у студента много хостов, а у хозяина много сообщений, вы можете попробовать has_many: через отношения между ними. так что вы бы

student.rb

HAS_MANY: сообщения через: хосты

ЗАКАНЧИВАТЬ рельсы направляющих для получения дополнительной информации http://edgeguides.rubyonrails.org/association_basics.html#the-has-many-through-association

студента.гь

has_many :hosts 
has_many :posts, through: hosts 

host.rb

belongs_to :student 
has_many :posts 

post.rb

belongs_to :student 
belongs_to :host 

Таким образом, вы можете получить сообщения, которые принадлежат к определенному хосту, все посты, которые студент отправил и все сообщения, которые ученик разместил о хосте.

Смежные вопросы