我有一个用户模型和一个电子邮件模型。用户可以创建电子邮件并接收它们。收到的电子邮件实际上只是一封电子邮件,但已加入不同领域的用户。我的设置如下,但它无法正常工作。当我在创建电子邮件的用户(并且没有收到它)上调用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。
我不确定是否可以这样做,是否使用范围,甚至是我不知道的其他东西。
感谢。
答案 0 :(得分:0)
你的一个让!语句构造了一个属于main_user的电子邮件,因此您可以正确获得一个结果。
更新
以上是不正确的。请尝试if messages.any?
而不是if messages
,因为它将始终返回true,因为关联返回一个数组(如果没有匹配的记录,则为空数组)