2016-03-27 3 views
0

Я застрял в этой проблеме уже пару дней, я нашел несколько других вопросов о стеке, которые мы похожи, но решения там не помогли. Я пытаюсь создать две отдельные полиморфные ассоциации между двумя таблицами. У меня есть таблица пользователей, бизнес-таблица и таблица сообщений. Я не хочу, чтобы пользователь мог общаться друг с другом по одному разговору.Ruby on Rails две отдельные полиморфные ассоциации между двумя таблицами

Это моя схема сообщения:

class CreateMessages < ActiveRecord::Migration 
    def change 
    create_table :messages do |t| 
     t.references :receiver, polymorphic: true, index: true 
     t.text :message 
     t.boolean :status, default: false 
     t.references :sender, polymorphic: true, index: true 
     t.timestamps 
    end 
    end 
end 

Сообщения Модель

class Message < ActiveRecord::Base 
    belongs_to :sender, polymorphic: true 
    belongs_to :receiver, polymorphic: true 

    scope :unread, lambda {|| where("status = false")} 

end 

Пользователи Модель

has_many :messages, as: :sender 
    has_many :messages_out, as: :receiver, source: :messages 

Бизнес-модель

has_many :messages, as: :sender 
    has_many :messages_out, as: :receiver, source: :messages 

Rails консоли

2.2.1 :060 > User.first.messages_out 
User Load (1.3ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 
NameError: uninitialized constant User::MessagesOut 

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

User.first.messages 

Я попробовал несколько вариантов этого и ни один из них не похоже, работает, если настройка моей базы данных или модели, как это просто нецелесообразно, и эта установка не может работать, пожалуйста, дайте мне знать, и любой другой настройка была бы оценена.

ответ

1

Вы должны явно сказать, какой класс метод messages_out должен быть нагрузка:

has_many :messages_out, as: :receiver, source: :messages, class_name: "Message" 
+0

Да, я пытался что-то подобное раньше, и он все еще дал мне ошибку. NameError: uninitialized constant User :: MessagesOut –

+0

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

+0

Ух ты, похоже, теперь это сработало, я закрыл терминал и снова открыл его, и он начал работать с решением, которое ты мне дал. Действительно странно, я бежал перезагрузиться !. Я приму свой ответ, как только это позволит. Благодаря! Похоже, мне даже не нужен тег источника. –

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