1

私の問題はレールに似ていますが、プロファイルを編集した後にユーザーがサインアウトしますか? しかし、私はサインイン/サインアップにデバイスを使用していません。むしろ、Michael Hartl の railstutorial 章 7-9 からコピーしたコードを使用しています。そして、それは開発でうまく機能します!しかし、Heroku にプッシュすると、ユーザーが編集 (更新) をプロファイルに保存した後、アプリがユーザーをサインアウトします。編集内容はデータベースに正しく保存されます。

ここに github があります: https://github.com/crowdpublishtv/crowdpublishtv

ここに私の users_controller.rb があります:

class UsersController < ApplicationController
  before_filter :signed_in_user, only: [:index, :edit, :update]
  before_filter :correct_user,   only: [:edit, :update]

  def index
    @users = User.all
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @users }
    end
  end

  def show
    @user = User.find(params[:id])
    @books = @user.books
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end

  def blog
    @user = User.find(params[:id])
    respond_to do |format|
      format.html # blog.html.erb
      format.json { render json: @user }
    end
  end

  def profileinfo
    @user = User.find(params[:id])
    respond_to do |format|
      format.html # profileinfo.html.erb
      format.json { render json: @user }
    end
  end

  def booklist
    @user = User.find(params[:id])
    @books = @user.books
    respond_to do |format|
      format.html # booklist.html.erb
      format.json { render json: @user }
    end
  end

  def new
    @user = User.new
    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @user }
    end
  end

  def edit
    @user = User.find(params[:id])
    @books = @user.books
    @book = current_user.books.build if signed_in?
    @booklist = Book.where(:user_id => @user.id)
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      sign_in @user
      redirect_to @user
    else
      render 'new'
    end
  end

  def update
    @user = User.find(params[:id])
    @booklist = Book.where(:user_id => @user.id)
    if @user.update_attributes(params[:user])
      sign_in @user
      redirect_to @user
    else
      render 'profileinfo'
    end
  end

  def destroy
    @user = User.find(params[:id])
    @user.destroy
    respond_to do |format|
      format.html { redirect_to users_url }
      format.json { head :ok }
    end
  end

  private

    def signed_in_user
      unless signed_in?
        store_location
        redirect_to signin_url, notice: "Please sign in." 
      end
    end

    def correct_user
      @user = User.find(params[:id])
      redirect_to(signin_url) unless current_user?(@user)
    end
end
4

1 に答える 1

0

Devise gem を追加すると、この問題はなくなりました

于 2013-10-01T01:41:10.557 に答える