2013-10-15 53 views
0

我有一個用戶模型和一個電子郵件模型。用戶可以創建電子郵件並接收它們。收到的電子郵件實際上只是一封電子郵件,但加入到不同領域的用戶。我的設置位於下方,但無法正常工作。當我在創建電子郵件的用戶上調用received_messages(並沒有收到它)時,他也會看到一條消息。 這是可能的嗎?有效記錄虛擬模型

class User < ActiveRecord::Base 
    has_many :mail_messages 
    has_many :received_messages, class_name: 'MailMessage', foreign_key: 'to_id' 
end 

class MailMessage < ActiveRecord::Base 
    belongs_to :user 
emd 

我確實創造了這些消息控制器:

class ReceivedEmailsController < ApplicationController 

    before_filter :authenticate_user! 

    def index 
    messages = current_user.received_messages 

    if messages 
     render json: messages, each_serializer: MailMessageSerializer, status: :ok 
    else 
     render json: :nothing, status: :not_found 
    end 
    end 

    def show 
    message = current_user.received_messages.where(id: params[:id]).first 

    if message 
     render json: message, serializer: MailMessageSerializer, status: :ok 
    else 
     render json: :nothing, status: :not_found 
    end 
    end 
end 

測試:

describe ReceivedEmailsController do 

    let!(:main_user) { Fabricate :user } 
    let!(:receiving_user) { Fabricate :user } 
    let!(:message) { Fabricate :mail_message, user_id: main_user.id, to_id: receiving_user.id } 

    describe 'get index' do 

     it 'should give not found when there are no emails received' do 
     main_user.confirm! 
     sign_in main_user 
     get :index 
     JSON.parse(response.body)['received_emails'].size.should eq 0 
     end 
    end 
    end 

而不是0,我得到1回,相同的消息,我回來時做通過receive_user進行測試。我想通過receiver_user獲取消息,但不通過main_user。

我不確定是否可以這樣做,是否使用示波器,甚至我不知道的其他東西。

謝謝。

+0

我認爲您希望用戶和消息之間的連接表允許多個收件人,其中每一個都可以是「to」,「cc」或「bcc」。 –

回答

0

你的一個讓!報表製作屬於main_user的電子郵件,因此您可以正確地得到一個結果。

UPDATE

以上錯誤。嘗試if messages.any?而不是if messages,因爲它將始終返回true,因爲關聯會返回一個數組(如果沒有匹配記錄,則爲空數組)

+0

,但ReceivedEmailsController通過current_user.received_messages獲取索引,我只需要在這種情況下的電子郵件,其中current_user.id等於來自MailMessage的to_id – Rudi