简体   繁体   English

在Rails 4中回复与Mailboxer gem的对话

[英]Replying to conversations with Mailboxer gem in Rails 4

I'm having trouble replying to conversations with the Mailboxer gem in Rails 4. There isn't a whole lot of documentation on this gem, or maybe I'm just not experienced enough, but I've been stuck on this for a while now. 我在回复与Rails 4中的Mailboxer gem的对话时遇到麻烦。关于此gem的文档不多,或者我只是经验不足,但是我在此问题上停留了一段时间现在。

view/conversations/index: (shows list of all current user's conversations) 查看/对话/索引:( 显示当前所有用户对话的列表)

<% @conversations.each do |conversation| %>
<%= link_to conversation.subject, reply_conversation_path(conversation.id) %>
<%= conversation.updated_at.strftime("%a, %m/%e/%Y %I:%M %p") %>
<%= link_to "Move to Trash", {:controller => "conversations", :action => 
    "trash", :id => conversation.id}, :title=> "Move to Trash", :method=>'post' %>
<% end %>

When I click the first link_to in the above view, I receive the routing error: No route matches [GET] "/conversations/68/reply" . 单击上面视图中的第一个link_to时,收到路由错误: No route matches [GET] "/conversations/68/reply"

I was hoping to have it render the following view, and have the correct conversation passed to it: 我希望它呈现以下视图,并传递正确的对话信息:

view/messages/_form/ (used to reply to existing conversations) 查看/消息/ _form / (用于回复现有对话)

Reply:
<%= form_for :message, url: :conversation do |f| %>
<%= f.text_area :body %>
<%= f.submit "Send Message", class: 'btn btn-primary' %>
<%= submit_tag 'Clear Reply Box', type: :reset, class: 'btn btn-danger' %>
<% end %>

Routes: 路线:

resources :users
root to: 'profiles#index'

resources :messages do
  member do
      post :new
  end
end
resources :conversations do
  member do
      post :reply
      post :trash
      post :untrash
  end
  collection do
      get :trashbin
      post :empty_trash
  end
end

Conversations Controller: 会话控制器:

class ConversationsController < ApplicationController
before_filter :authenticate_user!
helper_method :mailbox, :conversation
def index
    @conversations ||= current_user.mailbox.inbox.all
end

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

def trashbin
    @trash ||= current_user.mailbox.trash.all
end

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

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

def empty_trash
    current_user.mailbox.trash.each do |conversation|
        conversation.receipts_for(current_user).update_all(:deleted => true)
    end
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

Messages Controller: 邮件控制器:

class MessagesController < ApplicationController

# GET /message/new
def new

    @request = Request.find(params[:request])
    @message = current_user.messages.new
    @user = @request.user
end

# POST /message/create
def create

@user = User.find(params[:user])
@body = params[:body]
@subject = params[:subject]

current_user.send_message(@user, params[:body], params[:subject])
flash[:notice] = "Message has been sent!"
redirect_to :conversations
end
end

relevant rake routes: 相关耙路:

                    users GET    /users(.:format)                     users#index
                      POST   /users(.:format)                     users#create
             new_user GET    /users/new(.:format)                 users#new
            edit_user GET    /users/:id/edit(.:format)            users#edit
                 user GET    /users/:id(.:format)                 users#show
                      PATCH  /users/:id(.:format)                 users#update
                      PUT    /users/:id(.:format)                 users#update
                      DELETE /users/:id(.:format)                 users#destroy
                 root GET    /                                    profiles#index
              message POST   /messages/:id(.:format)              messages#new
             messages GET    /messages(.:format)                  messages#index
                      POST   /messages(.:format)                  messages#create
          new_message GET    /messages/new(.:format)              messages#new
         edit_message GET    /messages/:id/edit(.:format)         messages#edit
                      GET    /messages/:id(.:format)              messages#show
                      PATCH  /messages/:id(.:format)              messages#update
                      PUT    /messages/:id(.:format)              messages#update
                      DELETE /messages/:id(.:format)              messages#destroy
   reply_conversation POST   /conversations/:id/reply(.:format)   conversations#reply
   trash_conversation POST   /conversations/:id/trash(.:format)   conversations#trash
 untrash_conversation POST   /conversations/:id/untrash(.:format) conversations#untrash
trashbin_conversations GET    /conversations/trashbin(.:format)    conversations#trashbin
empty_trash_conversations POST   /conversations/empty_trash(.:format) conversations#empty_trash
        conversations GET    /conversations(.:format)             conversations#index
                      POST   /conversations(.:format)             conversations#create
     new_conversation GET    /conversations/new(.:format)         conversations#new
    edit_conversation GET    /conversations/:id/edit(.:format)    conversations#edit
         conversation GET    /conversations/:id(.:format)         conversations#show
                      PATCH  /conversations/:id(.:format)         conversations#update
                      PUT    /conversations/:id(.:format)         conversations#update
                      DELETE /conversations/:id(.:format)         conversations#destroy

To give you an idea of how I've gotten this far, I've been following this tutorial: http://jamestansley.com/2014/02/22/customizing-the-mailboxer-ruby-gem-2/ 为了让您了解到目前为止的情况,我一直在关注本教程: http : //jamestansley.com/2014/02/22/customizing-the-mailboxer-ruby-gem-2/

I'm guessing that I need to study routing more, but I need to finish this by the end of the weekend, so you're help is greatly appreciated. 我猜想我需要更多地研究路由,但是我需要在周末结束之前完成此过程,非常感谢您的帮助。

In case I've left anything out, here's my github repo: https://github.com/portOdin/GoFavorIt-Heroku/tree/stackflow/app . 万一我遗漏了任何东西,这是我的github存储库: https : //github.com/portOdin/GoFavorIt-Heroku/tree/stackflow/app

UPDATE: 更新:

I solved the problem, as I mentioned below, though I have another now. 我已经解决了这个问题,如下所述,尽管现在我还有另一个问题。

'undefined method `[]' for nil:NilClass' 'nil:NilClass的未定义方法'[]'

在此处输入图片说明

This question's getting pretty large so I'll probably open another later, unless you can help me out here. 这个问题越来越大,所以除非您能在这里帮助我,否则我可能稍后再打开另一个。

I replaced the line: 我替换了该行:

 <%= link_to conversation.subject, reply_conversation_path(conversation.id) %> 

with: 与:

<%= link_to "Reply To Conversation", {:controller => "conversations", :action => 
"reply", :id => conversation.id}, :title=> "Reply To Conversation", :method=>'post' %>

I just copied and modified the Move To Trash link. 我刚刚复制并修改了“移至垃圾箱”链接。 Not sure if it's the best way to do it, but it's working fine now. 不确定这是否是最好的方法,但是现在工作正常。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM