活动记录虚拟模型

时间:2013-10-15 11:25:09

标签: ruby-on-rails activerecord

我有一个用户模型和一个电子邮件模型。用户可以创建电子邮件并接收它们。收到的电子邮件实际上只是一封电子邮件,但已加入不同领域的用户。我的设置如下,但它无法正常工作。当我在创建电子邮件的用户(并且没有收到它)上调用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回,我在通过receiving_user进行测试时得到的相同消息。我想通过receiving_user获取消息,但不是通过main_user。

我不确定是否可以这样做,是否使用范围,甚至是我不知道的其他东西。

感谢。

1 个答案:

答案 0 :(得分:0)

你的一个让!语句构造了一个属于main_user的电子邮件,因此您可以正确获得一个结果。

更新

以上是不正确的。请尝试if messages.any?而不是if messages,因为它将始终返回true,因为关联返回一个数组(如果没有匹配的记录,则为空数组)