问题从Mailboxer 0.11.0升级到0.12.4

时间:2014-11-16 22:57:01

标签: ruby-on-rails ruby ruby-on-rails-4 mailboxer

我刚刚更新到Mailboxer 0.12.4并按照Github自述文件中的说明进行操作。我有两个控制器用于处理Gem

通知

class NotificationsController < ApplicationController
    before_action :signed_in_user, only: [:create]

    def new
      @user = User.find(:user)
      @message = current_user.messages.new
    end

   def create
      @recepient = User.find(params[:notification][:id])

      current_user.send_message(@recepient, params[:notification][:body],params[:notification][:subject])
      flash[:success] = "Message has been sent!"

      redirect_to user_path @recepient
   end
end

会话

class ConversationsController < ApplicationController
    before_action :signed_in_user

    def index
       @conversations = current_user.mailbox.conversations.paginate(page: params[:page],:per_page => 5)
    end

    def show
        @conversation = current_user.mailbox.conversations.find_by( :id => params[:id] )

        @receipts = @conversation.receipts_for(current_user).reverse!
    end
end

我的用户模型有act_as_messagable。更新后,我的用户控制器中的此方法会抛出错误。

  

未初始化的常量UsersController :: Notification

突出显示的代码是

def show
    @user = User.find(params[:id])
    @message = Notification.new << this line
    ....
end

我尝试在控制台中创建Notification对象,但我得到了同样的错误。我已经看到更新已更改了命名空间,但我不知道如何更改我的代码以解决此问题。

This is the closest I have found to a solution but the guy doesn't say how he fixed it

1 个答案:

答案 0 :(得分:1)

好的,我得到了这个工作我需要找出原因,但它似乎与升级到0.12.4时引入的命名空间有关。

第1步:将我的控制器更改为

mailboxer_notification_controller.rb

class MailboxerNotificationsController < ApplicationController
    before_action :signed_in_user, only: [:create]

    def new
        @user = User.find(:user)
        @message = current_user.messages.new
    end

    def create
       @recepient = User.find(params[:mailboxer_notification][:id])

       current_user.send_message(@recepient, params[:mailboxer_notification][:body],params[:mailboxer_notification][:subject])
       flash[:success] = "Message has been sent!"

       redirect_to user_path @recepient
   end
end

注意:需要更改的参数名称

mailboxer_conversations_controller.rb

class MailboxerConversationsController < ApplicationController
    before_action :signed_in_user

    def index
        @conversations = current_user.mailbox.conversations.paginate(page: params[:page],:per_page => 5)
    end

    def show
        @conversation = current_user.mailbox.conversations.find_by( :id => params[:id] )

        @receipts = @conversation.receipts_for(current_user).reverse!
    end
end

第2步:我访问属于这些控制器的方法的任何地方需要使用正确的命名空间进行更新

def show
    @user = User.find(params[:id])
    @message = Mailboxer::Notification.new

    ....
end

第3步:更新您的config / routes.rb

SampleApp::Application.routes.draw do
    resources :mailboxer_conversations
    resources :mailboxer_notifications, only: [:create]

    match '/sendMessage',   to: 'mailboxer_notifications#create',   via: 'post'

    match '/conversations', to: 'mailboxer_conversations#index',    via: 'get'
    match '/conversation',  to: 'mailboxer_conversations#show',     via: 'get'
    ....
end

我不确定这些修复工作的确切原因,我需要花更多时间阅读rails中的命名空间。如果有人有一个很好的解释,请随意添加答案