0

アプリケーションに内部メッセージがあります。私はデバイスを使用しており、パスワードモジュールをインストールしましたが、まだ構成していません。パスワードをお忘れですか?このエラーが発生しました:

 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
4

1 に答える 1

0

user_id => nil を示しているためです。セッションの有効期限が切れていないかどうかを確認できますか

于 2013-09-20T05:15:33.083 に答える