首页 > 解决方案 > 与 Rails 反应 - 在服务器日志中回滚

问题描述

我有个问题。与数据库有关,因为在此之前我不明白迁移是什么。当我运行服务器时,数据库出现错误log_subscriber.rb:98,没有数据传输到前端,尽管在此之前一切正常。互联网上没有答案。

(2.5ms)  SELECT "schema_migrations"."version" FROM 
"schema_migrations" ORDER BY "schema_migrations"."version" ASC
↳ /home/vitalii/.ruby/gems/activerecord- 
5.2.2/lib/active_record/log_subscriber.rb:98

Started POST "/tasks/" for ::1 at 2019-02-17 18:09:51 +0200
   (1.2ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
  ↳ /home/vitalii/.ruby/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
Processing by TasksController#create as HTML
  Parameters: {"title"=>"Text", "description"=>"Text", "priority"=>"1", "active"=>true, "due_date"=>"2019-02-28", "task"=>{"title"=>"Text", "description"=>"Text", "priority"=>"1", "active"=>true, "due_date"=>"2019-02-28"}}
   (0.3ms)  BEGIN
  ↳ app/controllers/tasks_controller.rb:15
   (1.5ms)  ROLLBACK
  ↳ app/controllers/tasks_controller.rb:15
Completed 200 OK in 156ms (Views: 0.9ms | ActiveRecord: 7.1ms)

我的任务控制器

class TasksController < ApplicationController        
  def create
    @task = Task.create(task_params)
    render json: @task
  end

  private

  def task_params
    params.require(:task).permit(:title, :description, :priority, :active, :due_date)
  end       
end

标签: mysqlruby-on-railsreactjs

解决方案


很可能您的Task模型会默默地失败。如果存在验证,并且给定的输入不满足您的验证规则,则持久化将不会成功。所以使用@task = Task.create!(task_params)散列爆炸而不是@task = Task.create(task_params).

最有效的方法是:

def create
 @task = Task.new(task_params)
 @task.save ? head(:created) : (render json: @task.errors) 
end 

推荐阅读