如何解决Rails-Devise的注册控制器create动作似乎触发了两次
我添加了以下代码行来创建动作:
def create
super
@card = Card.find(params[:card_id])
@card.update(:user_id=>current_user)
end
一切正常,创建用户,更新卡,但是在重定向之后会发生:
Couldn't find Card with 'id'=
Extracted source (around line #14):
def create
super
@card = Card.find(params[:card_id])
@card.update(:user_id=>current_user)
end
我检查了我的终端,以找出发生这种情况的原因,并且似乎create action无缘无故地触发了两次:
Started POST "/users" for ::1 at 2020-08-12 11:04:34 +0300
Processing by Users::RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓","authenticity_token"=>"q1W0+ZhzK85uHTcp1x4jKHvCG0ukIgj2JxZuAy6vuLQl/vPqJVu6eXSEWviYTnWC4cXAJk2xCJhl8mgoWzXIAA==","user"=>{"name"=>"Терл Кабот","email"=>"tafff1@gmail.com","password"=>"[FILTERED]","password_confirmation"=>"[FILTERED]","card_id"=>"2000012606"},"commit"=>"Sign up"}
Card Load (1.0ms) SELECT "cards".* FROM "cards" WHERE "cards"."id" = $1 LIMIT $2 [["id",2000012606],["LIMIT",1]]
(0.0ms)
BEGIN
User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email","tafff1@gmail.com"],1]]
SQL (1.0ms) INSERT INTO "users" ("email","encrypted_password","name","created_at","updated_at") VALUES ($1,$2,$3,$4,$5) RETURNING "id" [["email",["encrypted_password","$2a$12$qTrv/zFUxULi9sqWgYlY/uPjQoJsZxB8PJK2ae/e6YfAFT40ci47e"],["name","Терл Кабот"],["created_at","2020-08-12 08:04:35.174621"],["updated_at","2020-08-12 08:04:35.174621"]]
SQL (1.0ms) UPDATE "cards" SET "user_id" = $1,"updated_at" = $2 WHERE "cards"."id" = $3 [["user_id",17],"2020-08-12 08:04:35.178626"],["id",2000012606]]
(1.0ms) COMMIT
Redirected to http://localhost:3000/
Card Load (0.0ms) SELECT "cards".* FROM "cards" WHERE "cards"."id" = $1 LIMIT $2 [["id",nil],1]]
Completed 404 Not Found in 378ms (ActiveRecord: 6.0ms)
ActiveRecord::RecordNotFound (Couldn't find Card with 'id'=):
对此有什么解决办法吗?
编辑:我放弃了,只是更改了卡和用户逻辑,现在用户属于卡,所以我不必从设备创建动作中更新卡user_id。
解决方法
card_id
嵌套在用户密钥中,因此它将是:params[:user][:card_id]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。