这是许多用户以及使用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
答案 0 :(得分: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 文件中编辑“新”方法,以限制对 / signup 路径的访问(当用户已登录时)和 sessions_controller.rb 文件中的“新”方法,用于在已登录时限制对 / 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
并将这些行添加到 sessions_controller.rb 文件中的“新”方法
def new
if signed_in?
redirect_to root_url
flash[:error] = 'Already logged-in'
else
end
end
这个解决方案对我有用,因为我也使用Rails 4.0(railstutorials)