弃用警告:不推荐使用before_filter,将在Rails 5.1中删除。使用before_action代替

时间:2017-01-10 15:23:44

标签: ruby-on-rails json ruby postgresql

这里发生了什么?我试图通过使用JSON数据类型的ajax调用添加数据。但每次我尝试添加数据时都会显示错误,如图所示。

Rails log in terminal

我认为它总是响应html格式,但不响应json格式。

def new
  @batch = Batch.new
  respond_to do |format|
    format.json
    format.html
  end
end

def create
  @batch = Batch.new(batch_param)
  puts "/n/n/n/n name: #{@batch.name} /n/n/n/n"
  respond_to do |format|
     if @batch.save
       format.json { render json: @batch, status: :created, location: @batch }
       format.html { redirect_to @batch, notice: "Save process completed!" }
     else
      format.html {
        flash.now[:notice]="Save proccess coudn't be completed!"
        render :new
      }
      format.json { render json: @batch.errors, status: :unprocessable_entity}
    end
  end
end

2 个答案:

答案 0 :(得分:2)

这只是折旧警告,如果您将应用升级到导轨5.1,可能会出现错误,如日志中明确提到的那样,您可以通过搜索您使用的控制器来解决此问题before_filter并将其替换为before_action

before_action执行相同的操作(在请求命中控制器中的操作之前运行一些代码)before_filter在早期版本的rails中执行。

答案 1 :(得分:0)

DEPRECATION WARNING行来自您的application_controller.rb,只需将before_filter更改为before_action,此警告就会消失。

Can't verify CSRF token authenticity是实际错误,导致无法返回正确的结果。如果您的控制器不需要CSRF令牌用于JSON请求,您应该向控制器添加如下所示的行:

skip_before_action :verify_authenticity_token, if: :json_request?