我在我的應用程序中用戶模型之間使用郵箱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
答案很可能是一些非常愚蠢的,但我是新來這個...
感謝
好的,謝謝,工作。我按照你的建議在我的管理員:會話控制器中定義了它。我現在唯一需要做的就是改變顯示路徑以包含鏈接的「管理」部分。目前它將轉到root/conversation/id,並且我需要root/admin/conversation/id –