登录用户没有理由访问新的并创建(有更好的答案)

时间:2013-10-13 09:10:22

标签: ruby-on-rails-4 railstutorial.org

这是许多用户以及使用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

1 个答案:

答案 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)