0

我正在学习 RailsApps Stripe 教程。

当通过控制器创建新订阅者时,devise registration他们将通过控制器定向到他们的内容页面content。我想使用他们nameemail address在他们的内容页面上注册时创建。但我似乎无法将参数带入内容控制器。

我投入@user = User.find(params[:id])content_controller但我得到了错误"Couldn't find User without an ID".

在错误页面上,它在 Request Info > rack session: 下列出"warden.user.user.key"=>["User", [2]

那么这是否意味着用户 #2 的 ID 被传递给content_controller但我无法访问它?

4

2 回答 2

0

current_user使用 Devise,您可以通过控制器中的帮助程序访问当前登录的用户。

请参阅文档:https ://github.com/plataformatec/devise#controller-filters-and-helpers

于 2014-04-27T19:27:42.283 回答
0

我将@user = User.find(params[:id]) 放入 content_controller 但我收到错误“找不到没有 ID 的用户”。

此错误意味着params[:id] = nil,即,您id在将用户重定向到时没有传入 params 哈希content page

可能的解决方案:

  1. 随着Devise您获得一个名为的帮助方法current_user,该方法返回当前登录用户的实例。因此,您可以直接使用current_user来访问当前登录用户的属性。例如:

    要访问当前登录用户nameemail字段,您需要做的就是

    current_user.name
    current_user.email
    
  2. routes.rb中,通过页面的路由传递id当前登录用户的content,如下所示:

    ##  Add :id dynamic segment to your content page route  
    get "content/:id", :to => "contents#action_name", :as  => "content_page"
    

    由于我没有路线详细信息,您需要根据您的要求修改上述路线。

    接下来,将用户重定向到content页面时,只需在名为的方法sign up中传递当前登录的用户,如下所示(如果要将用户重定向到与默认路由不同的路由,则需要覆盖此 Devise 方法):ApplicationControllerafter_sign_up_path_forroot path

    def after_sign_up_path_for(resource)
      content_page_path(resource) ## Provide the path and pass resource to it
    end
    
于 2014-04-27T20:01:53.467 回答