无法更新特定于表的实例的状态,因为正在进行回滚

时间:2015-07-08 21:03:29

标签: ruby-on-rails ruby methods rollback

我有一个包含列状态的表订阅。在我的订阅控制器中,我有一个方法accept_player,应该将subscription.status更新为"confirmed!"

  def accept_player
     @subscription = Subscription.find(params[:subscription_id_accept_player])
     @subscription.status = "confirmed!"

     @subscription.save

     authorize @subscription
     redirect_to tournament_subscriptions_path(@subscription.tournament)
  end

不幸的是,每当我尝试触发该方法时,似乎都会发生回滚:

Started POST "/accept_player/39" for ::1 at 2015-07-08 22:01:21 +0100
  ActiveRecord::SchemaMigration Load (12.4ms)  SELECT "schema_migrations".* FROM "schema_migrations"
/Users/davidgeismar/code/davidgeismar/tennis-match/app/controllers/subscriptions_controller.rb:141: warning: duplicated key at line 155 ignored: "CardType"
Processing by SubscriptionsController#accept_player as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"aas8OPHBpvPwNbbmx/SVipsRM+eKo63nuVilMroxKcU9HRVonjSqEuH7aLY91gFi9PHMUsUqRqk7qhnv2m4L/A==", "subscription_id_accept_player"=>"39", "commit"=>"Confirmer ce Joueur", "subscription_id"=>"39"}
  User Load (13.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 2]]
  Subscription Load (11.6ms)  SELECT  "subscriptions".* FROM "subscriptions" WHERE "subscriptions"."id" = $1 LIMIT 1  [["id", 39]]
   (5.7ms)  BEGIN
  Subscription Exists (0.8ms)  SELECT  1 AS one FROM "subscriptions" WHERE ("subscriptions"."user_id" = 20 AND "subscriptions"."id" != 39 AND "subscriptions"."tournament_id" = 9) LIMIT 1
   (12.6ms)  ROLLBACK
  Tournament Load (2.4ms)  SELECT  "tournaments".* FROM "tournaments" WHERE "tournaments"."id" = $1 LIMIT 1  [["id", 9]]
  User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 2]]
Redirected to http://localhost:3000/tournaments/9/subscriptions
Completed 302 Found in 246ms (ActiveRecord: 79.7ms)

关于这里可能出现什么问题的任何想法?

1 个答案:

答案 0 :(得分:0)

此代码:

authorize @subscription

可能导致回滚。如果您处于开发模式,只需将其注释掉reload!,然后尝试手动添加记录,看看是否是原因。