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

时间:2014-06-08 01:21:06

标签: ruby-on-rails routing mailboxer

我无法在Rails 4中回复与Mailboxer gem的对话。这个宝石上没有很多文档,或者我可能没有足够的经验,但我&# 39;现在已经坚持了一段时间。

查看/会话/索引: (显示所有当前用户对话的列表)

<% @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 %>

当我点击上面视图中的第一个link_to时,收到路由错误:No route matches [GET] "/conversations/68/reply"

我希望让它呈现以下视图,并将正确的对话传递给它:

查看/消息/ _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 %>

路线:

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

对话控制器:

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

消息控制器:

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

相关的佣金路线:

                    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

为了让您了解我是如何做到这一点的,我一直在关注本教程:http://jamestansley.com/2014/02/22/customizing-the-mailboxer-ruby-gem-2/

我猜我需要更多地学习路由,但我需要在周末结束时完成此任务,所以非常感谢您的帮助。

如果我遗漏了任何东西,请点击此处查看我的github回购: https://github.com/portOdin/GoFavorIt-Heroku/tree/stackflow/app

更新:

我解决了这个问题,正如我在下面提到的那样,尽管我现在还有另一个问题。

&#39;未定义的方法`[]&#39;为零:NilClass&#39;

enter image description here

这个问题变得非常大,所以我以后可能会再打开另一个问题,除非你能在这里帮助我。

1 个答案:

答案 0 :(得分:0)

我换了一行:

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

使用:

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

我刚刚复制并修改了Move To Trash链接。不确定它是否是最好的方法,但它现在正常工作。