アプリケーションに内部メッセージがあります。私はデバイスを使用しており、パスワードモジュールをインストールしましたが、まだ構成していません。パスワードをお忘れですか?このエラーが発生しました:
No route matches {:controller=>"messages", :mailbox=>:inbox, :user_id=>nil}
だから私が必要なのは: この問題を解決するにはどうすればよいですか? パスワードを忘れる機能をアクションメーラーで機能させる方法。ユーザーはデータベースに保存された電子メールを使用してパスワードをリセットできます。
注: 内部メッセージをアプリにインストールする前に、パスワードを忘れた場合のリンクをクリックしようとすると、正常にリダイレクトされていました。
devise による登録ではなく、別のコントローラーを登録に使用しています。サインアップ時に、ユーザーは管理者によって追加されます。これは私のルートファイルからのものです
devise_for :users, :controllers => { :registrations => "users" }
resources :users, only: [:index, :new, :create, :show, :destroy, :edit, :update] do |user|
resources :messages do
collection do
post 'delete_multiple'
end
end
end
パスワードを忘れた場合のリンク
<%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
<%= link_to "Forgot your password?", new_password_path(resource_name), :class => "btn btn-danger" %><br />
<% end -%>
Users_Controller.rb
class UsersController < ApplicationController
load_and_authorize_resource
def index
@users = User.all
@users_grid = initialize_grid(User,
:per_page => 5)
end
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = 'A new user created successfully.'
redirect_to users_path
else
flash[:error] = 'An error occurred please try again!'
redirect_to users_path
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:notice] = 'Profile updated'
redirect_to users_path
else
render 'edit'
end
end
def destroy
@user = User.find(params[:id])
if current_user == (@user)
flash[:error] = "Admin suicide warning: Can't delete yourself."
else
@user.destroy
flash[:notice] = 'User deleted'
redirect_to users_path
end
end
end
Messaages_controller.rb
class MessagesController < ApplicationController
before_filter :set_user
def index
if params[:mailbox] == "sent"
@messages = @user.sent_messages
elsif params[:mailbox] == "inbox"
@messages = @user.received_messages
#elsif params[:mailbox] == "archieved"
# @messages = @user.archived_messages
end
end
def new
@message = Message.new
if params[:reply_to]
@reply_to = User.find_by_id(params[:reply_to])
unless @reply_to.nil?
@message.recepient_id = @reply_to.id
end
end
end
def create
@message = Message.new(params[:message])
@message.sender_id = @user.id
if @message.save
flash[:notice] = "Message has been sent"
redirect_to user_messages_path(current_user, :mailbox=>:inbox)
else
render :action => :new
end
end
def show
@message = Message.readingmessage(params[:id],@user.id)
end
def delete_multiple
if params[:delete]
params[:delete].each { |id|
@message = Message.find(id)
@message.mark_message_deleted(@message.id,@user.id) unless @message.nil?
}
flash[:notice] = "Messages deleted"
end
redirect_to user_messages_path(@user, @messages)
end
private
def set_user
@user = current_user
end
end