1

这是对许多用户以及使用 Rails 4.0 并遵循更新教程的用户提出的一个常见问题的答案,

由于这个问题的答案已由 Michael Hartl 的更新版本的Railstutorial(rails 4.0)更新

我在几乎所有与这个问题相关的帖子中都发现,解决这个问题的方法是在users_controller.rb文件中添加这些行

before_filter :signed_in_user_filter, only: [:new, :create]

.
.
.
def signed_in_user_filter
    if signed_in?
        redirect_to root_path, notice: "Already logged in"
    end
end

但是此解决方案仅适用于localhost:3000/signup但不会对localhost:3000/ signin 执行任何操作,因为它是针对 railstutorial(Rails 3.0)给出的解决方案。它不适用于那些关注 Railstutorial(Rails 4.0)。

对于这个问题的参考,你可以看到这篇文章Railstutorial:exercise 9.6

4

1 回答 1

1

因此,对于 Rails 4.0,我在查看/config/routes.rb文件时找到了解决方案

match '/signup',  to: 'users#new',            via: 'get' 
  match '/signin',  to: 'sessions#new',         via: 'get'

那些使用 Rails 4.0 并遵循教程的人,您需要在users_controller.rb文件中编辑“new”方法以限制对/signup路径的访问(当用户已经登录时)和 session_controller.rb 中的“new”方法用于在已登录时限制对/signin路径的访问的文件。

您需要将这些行添加到users_controller.rb文件中的“新”方法

def new
  if signed_in?
   redirect_to root_url
   flash[:notify] = '!Please log-out before Signing-up'
   else
   @user = User.new
  end
end  

并将这些行添加到session_controller.rb文件中的“新”方法中

def new
   if signed_in?
    redirect_to root_url
    flash[:error] = 'Already logged-in'
   else
   end
  end

这个解决方案对我有用,因为我也在使用 Rails 4.0(railstutorials)

于 2013-10-13T13:41:25.260 回答