2014-02-07 56 views
1

我在我的應用程序中用戶模型之間使用郵箱gem進行對話/消息。這一切工作正常,感謝堆棧溢出的一些很好的幫助。我現在試圖設置一個部分,以便管理員可以查看正在發生的所有對話。郵箱寶石,管理員查看

我爲嵌套在我的管理部分中的對話創建了一個控制器和視圖。我已經在索引頁面中引用了所有會話:

def index 
    @admin_conversations = Conversation.all 
    end 

這列出了所有會話,並顯示了按預期顯示每個會話的鏈接。

我遇到的問題是郵箱Gem設置爲只允許current_user查看current_user是參與者的會話。所以我可以單擊某些對話(簽名爲admin)和看到內容,但有些(即是其他測試用戶之間),我看不出即它拋出一個異常,如:

Couldn't find Conversation with id=5 [WHERE "notifications"."type" = 'Message' AND "receipts"."receiver_id" = 35 AND "receipts"."receiver_type" = 'User'] 

我怎麼能在我的管理控制器定義的方法,以便管理員能看到的一切?

我目前使用的康康舞,並允許像這樣全部3個用戶角色我有(管理員,客戶和供應商):

can :manage, Conversation 

...所以它不是一個正常的授權問題。

這裏是我的談話控制器:

class ConversationsController < ApplicationController 
    authorize_resource 
    helper_method :mailbox, :conversation 


    def create 
    recipient_emails = conversation_params(:recipients).split(',') 
    recipients = User.where(email: recipient_emails).all 

    conversation = current_user. 
     send_message(recipients, *conversation_params(:body, :subject)).conversation 

    redirect_to :back, :notice => "Message Sent! You can view it in 'My Messages'." 
    end 

def count 
    current_user.mailbox.receipts.where({:is_read => false}).count(:id, :distinct => true).to_s 
end  

    def reply 
    current_user.reply_to_conversation(conversation, *message_params(:body, :subject)) 
    redirect_to conversation 
    end 

    def trash 
    conversation.move_to_trash(current_user) 
    redirect_to :conversations 
    end 

    def untrash 
    conversation.untrash(current_user) 
    redirect_to :conversations 
    end 

    private 


    def mailbox 
    @mailbox ||= current_user.mailbox 
    end 

    def conversation 
    @conversation ||= mailbox.conversations.find(params[:id]) 
    end 


    def conversation_params(*keys) 
    fetch_params(:conversation, *keys) 
    end 

    def message_params(*keys) 
    fetch_params(:message, *keys) 
    end 

    def fetch_params(key, *subkeys) 
    params[key].instance_eval do 
     case subkeys.size 
     when 0 then self 
     when 1 then self[subkeys.first] 
     else subkeys.map{|k| self[k] } 
     end 
    end 
    end 
end 

答案很可能是一些非常愚蠢的,但我是新來這個...

感謝

回答

1

在你的談話方式,您的電話mailbox.conversations.find(params[:id])

mailbox.conversations是什麼限制你到當前用戶的談話。

試試只是Conversation.find(params[:id])

+0

好的,謝謝,工作。我按照你的建議在我的管理員:會話控制器中定義了它。我現在唯一需要做的就是改變顯示路徑以包含鏈接的「管理」部分。目前它將轉到root/conversation/id,並且我需要root/admin/conversation/id –