【问题标题】:Accessing Params in Rails 3.2在 Rails 3.2 中访问参数
【发布时间】:2014-06-13 04:01:07
【问题描述】:

我正在学习 RailsApps Stripe 教程。

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

我将@user = User.find(params[:id]) 放入content_controller,但收到错误"Couldn't find User without an ID".

在请求信息>机架会话下列出的错误页面上:"warden.user.user.key"=>["User", [2]

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

【问题讨论】:

  • 给出devise_registration_controller.rbcontent_controller.rb中的内容,看看你是如何重定向的?

标签: ruby-on-rails devise ruby-on-rails-3.2 stripe-payments railsapps


【解决方案1】:

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

此错误表示params[:id] = nil,即在将用户重定向到content page 时,您没有在参数哈希中传递id

可能的解决方案:

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

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

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

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

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

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

    def after_sign_up_path_for(resource)
      content_page_path(resource) ## Provide the path and pass resource to it
    end
    

【讨论】:

    【解决方案2】:

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

    查看文档:https://github.com/plataformatec/devise#controller-filters-and-helpers

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      相关资源
      最近更新 更多