2014-02-16 3 views
1

Я хочу узнать, как правильно настроить и использовать отношения в ActiveRecord.Собственные отношения ActiveRecord для сообщений

У меня есть модели:

class Message < ActiveRecord::Base 
    has_and_belongs_to_many :users, :association_foreign_key => :from_user_id 
end 

class User < ActiveRecord::Base 
    has_many :messages, :foreign_key => :to_user_id 
end 

таблица выглядит следующим образом:

|----------------------------------------------------------------| 
| id | from_user_id | to_user_id | content | created_at | status | 
|----------------------------------------------------------------| 
| 1 | 1   | 2   | Hi, 2! | <...>  | red | 
| 2 | 2   | 1   | Hey, 1 | <...>  | red | 
| 3 | 1   | 2   | Whats up| <...>  | sent | 
| ...               | 
|----------------------------------------------------------------| 

Как я хочу использовать его:

Контроллер:

class MessageController < ApplicationController 
    def list 
    @inbox = Message.where(:to_user_id => current_user.id).order(:created_at => :desc).group(:from_user_id) 
    @outbox = Message.where(:from_user_id => current_user.id).order(:created_at => :desc).group(:to_user_id) 
    end 
end 

Просмотр использования (ПОТЕРЯЕТ, ЧТО МОЖЕТ БЫТЬ МОЙ DELS НЕ ПОДКЛЮЧЕНЫ)

<% @inbox.each do |i| %> 
    <p><a href="/messages/<%=i.id%>"><%= User.find(i.from_user_id).email %></a><%= i.created_at %> <%= i.status %></p> 
<% end %> 

Я хочу получить информацию о пользователе от i. Возможно ли это? :) Давайте скажем что-то вроде i.user.email

Также было бы здорово получить к нему доступ от объекта пользователя. Например. current_user.messages.inbox (current_user из драгоценных камней 'изобрести')

+0

Проверить мое решение ниже, чтобы увидеть, если это поможет вам, @Vygandas – franksort

+0

Круто, я проверю позже сегодня, @franksort – Vygandas

ответ

0

приложение/модели/user.rb

class User < ActiveRecord::Base 
    has_many :inbox_messages, foreign_key: :to_user_id, class_name: 'Message' 
    has_many :outbox_messages, foreign_key: :from_user_id, class_name: 'Message' 
end 

приложение/модели/message.rb

class Message < ActiveRecord::Base 
    belongs_to :from_user, foreign_key: :from_user_id, class_name: 'User' 
    belongs_to :to_user, foreign_key: :to_user_id, class_name: 'User' 
end 

сейчас в view вы можете сделать (при условии, что current_user от Разработка:

Inbox: 

<% current_user.inbox_messages.each do |m| %> 
    From <%= m.from_user.email %> 
    Status <%= m.status %> 
    Content <%= m.content %> 
<% end %> 

Outbox: 

<% current_user.outbox_messages.each do |m| %> 
    To <%= m.to_user.email %> <br /> 
    Status <%= m.status %> <br /> 
    Content <%= m.content %> <br /> 
<% end %> 
+0

При попытке получить входящие сообщения, которые я получаю сообщение об ошибке: Неизвестный ключ: association_foreign_key. Что может быть причиной этого? – Vygandas

+0

@ Vygandas Какая версия Rails? ('$ rails --version') – franksort

+0

its - Rails 4.0.0 – Vygandas

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