【问题标题】:plan id not being assigned in Devise form. Rails计划 ID 未以设计形式分配。导轨
【发布时间】:2015-11-15 00:32:02
【问题描述】:

我有一个Rails 应用程序,主页上有 3 个注册按钮链接。
每个人都有自己的计划分配给它。其中两个进入基本表格,第三个进入包含信用卡详细信息的表格,由Stripe 处理。表格和用户由Devise 处理。

这些计划似乎设置正确,并在rails console 中看到,但是,当我转到sign up 时,其中任何一个都只捕获了电子邮件地址和密码,并且没有分配plan_id

我注意到在本地预览表单页面时,顶部的 url 不会更改为特定的表单 url,例如 /users/sign_up?plan=3,而是显示表单但停留在 homepage url? 我'我很困惑,因为服务器似乎识别出我正在单击哪个链接以及需要分配哪个计划?请帮忙!!

Started GET "/users/sign_up?plan=3" for 124.149.46.152 at 2015-08-21 06:32:19 +0000
Cannot render console from 124.149.46.152! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Users::RegistrationsController#new as HTML
  Parameters: {"plan"=>"3"}
  Rendered devise/registrations/_paid.html.erb (8.1ms)
  Rendered devise/shared/_links.html.erb (0.3ms)
  Rendered devise/registrations/new.html.erb within layouts/application (11.6ms)

在 154 毫秒内完成 200 次 OK(查看次数:151.7 毫秒 | ActiveRecord:0.0 毫秒)

控制台用户.last

=> #<User id: 7, email: "testemail1@test.com", encrypted_password: "$2a$10$.EldkZ3KUdnz4u1dvIMkXO7U6GnAnrGNYomdITKqup....", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2015-08-21 07:05:34", last_sign_in_at: "2015-08-21 07:05:34", current_sign_in_ip: "124.149.46.152", last_sign_in_ip: "124.149.46.152", created_at: "2015-08-21 07:05:34", updated_at: "2015-08-21 07:05:34", plan_id: nil, stripe_customer_token: nil> 

这是我的 application_controller.rb

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected
    def configure_permitted_parameters
      devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:name, :stripe_card_token, :email, :password, :password_confirmation }
    end
end

开发日志

Started POST "/users" for 124.149.46.152 at 2015-08-21 07:31:57 +0000
Cannot render console from 124.149.46.152! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Users::RegistrationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"mA18/inejU2zEZiYXJq1xEtguLOEWnIV9UBozrHyXKPp2/2n9Ls7Km4+fCuZBL51EHUxSE+QJFRdbgW1fbMyew==", "user"=>{"email"=>"test10@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
  [1m[35m (0.4ms)[0m  begin transaction
  [1m[36mUser Exists (0.2ms)[0m  [1mSELECT  1 AS one FROM "users" WHERE "users"."email" = 'test10@gmail.com' LIMIT 1[0m
  [1m[35mSQL (0.6ms)[0m  INSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["email", "test10@gmail.com"], ["encrypted_password", "$2a$10$4cjIpysvXyckg0j4Kxzx9eqR9vVzqcmaQZPLdCC0X2jEik2MG/KrK"], ["created_at", "2015-08-21 07:31:57.381867"], ["updated_at", "2015-08-21 07:31:57.381867"]]
  [1m[36m (19.3ms)[0m  [1mcommit transaction[0m
  [1m[35m (0.2ms)[0m  begin transaction
  [1m[36mSQL (0.5ms)[0m  [1mUPDATE "users" SET "last_sign_in_at" = ?, "current_sign_in_at" = ?, "last_sign_in_ip" = ?, "current_sign_in_ip" = ?, "sign_in_count" = ?, "updated_at" = ? WHERE "users"."id" = ?[0m  [["last_sign_in_at", "2015-08-21 07:31:57.405089"], ["current_sign_in_at", "2015-08-21 07:31:57.405089"], ["last_sign_in_ip", "124.149.46.152"], ["current_sign_in_ip", "124.149.46.152"], ["sign_in_count", 1], ["updated_at", "2015-08-21 07:31:57.406791"], ["id", 8]]
  [1m[35m (19.7ms)[0m  commit transaction
Redirected to https://socialplayground-portal-runpixelrun.c9.io/
Completed 302 Found in 136ms (ActiveRecord: 40.9ms)


Started GET "/" for 124.149.46.152 at 2015-08-21 07:31:57 +0000
Cannot render console from 124.149.46.152! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by PagesController#home as HTML
  [1m[36mPlan Load (0.4ms)[0m  [1mSELECT  "plans".* FROM "plans" WHERE "plans"."id" = ? LIMIT 1[0m  [["id", 1]]
  [1m[35mPlan Load (0.2ms)[0m  SELECT  "plans".* FROM "plans" WHERE "plans"."id" = ? LIMIT 1  [["id", 2]]
  [1m[36mPlan Load (0.2ms)[0m  [1mSELECT  "plans".* FROM "plans" WHERE "plans"."id" = ? LIMIT 1[0m  [["id", 3]]
  Rendered pages/home.html.erb within layouts/application (1.0ms)
  [1m[35mUser Load (0.4ms)[0m  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 8]]
Completed 200 OK in 210ms (Views: 207.3ms | ActiveRecord: 1.2ms)
  [1m[36mUser Load (0.7ms)[0m  [1mSELECT  "users".* FROM "users"  ORDER BY "users"."id" DESC LIMIT 1[0m


Started DELETE "/users/sign_out" for 124.149.46.152 at 2015-08-21 07:35:08 +0000
Cannot render console from 124.149.46.152! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Devise::SessionsController#destroy as HTML
  Parameters: {"authenticity_token"=>"p1LtsYqgP4SPYiiAh8/l1/XPNc888HMVob3thu5Y093WhGzoV8WJ41JNzDNCUe5mrtq8NPc6JVQJk4D9Ihm9BQ=="}
  [1m[36mUser Load (0.2ms)[0m  [1mSELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1[0m  [["id", 8]]
  [1m[35m (0.1ms)[0m  begin transaction
  [1m[36m (0.1ms)[0m  [1mcommit transaction[0m
Redirected to https://socialplayground-portal-runpixelrun.c9.io/
Completed 302 Found in 10ms (ActiveRecord: 0.4ms)


Started GET "/" for 124.149.46.152 at 2015-08-21 07:35:08 +0000
Cannot render console from 124.149.46.152! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by PagesController#home as HTML
  [1m[35mPlan Load (0.2ms)[0m  SELECT  "plans".* FROM "plans" WHERE "plans"."id" = ? LIMIT 1  [["id", 1]]
  [1m[36mPlan Load (0.1ms)[0m  [1mSELECT  "plans".* FROM "plans" WHERE "plans"."id" = ? LIMIT 1[0m  [["id", 2]]
  [1m[35mPlan Load (0.1ms)[0m  SELECT  "plans".* FROM "plans" WHERE "plans"."id" = ? LIMIT 1  [["id", 3]]
  Rendered pages/home.html.erb within layouts/application (0.8ms)
Completed 200 OK in 206ms (Views: 203.3ms | ActiveRecord: 0.5ms)

/registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController

  before_filter :select_plan, only: :new

  def create
    super do |resource|
      if params[:plan]
        resource.plan_id = params[:plan]
        if resource.plan_id == 3
          resource.save_with_payment
        else
          resource.save
        end
      end
    end
  end

  private  
  def select_plan
    unless params[:plan] && (params[:plan] == '1' || params[:plan] == '2' || params[:plan] == '3')
      flash[:notice] = "Please select a valid membership plan."
      redirect_to root_url
    end 
  end
end

【问题讨论】:

    标签: ruby-on-rails forms ruby-on-rails-4 devise rails-console


    【解决方案1】:

    要保存plan_id,您需要将其添加到设计注册参数中。您可以通过在应用程序控制器中添加以下内容来做到这一点

    before_filter :configure_permitted_parameters, if: :devise_controller?
    
    def configure_permitted_parameters
       devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password_confirmation, :plan_id) }
    end
    

    【讨论】:

    • 感谢@Ann10 的回复:) ..但它仍然没有保存!我编辑了我的问题以包含 User.last 的屏幕抓取
    • @RuNpiXelruN 从您的 OP 看来,您似乎没有将 plan_id 添加到允许的参数中
    • @usmanali 感谢您的回复!在 :password_confirmation 之后添加了抱歉,但仍然没有运气!..还有其他想法吗??
    • @RuNpiXelruN 您能粘贴显示此请求的日志吗?
    • @usmanali 现在附上了日志。感谢您的观看,我完全被卡住了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2011-10-12
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多