我刚刚更新到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
答案 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中的命名空间。如果有人有一个很好的解释,请随意添加答案