警告:before_filter已被弃用,并将在Rails 5.1中删除。请改用before_action。

3

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

终端中的Rails日志

我认为它总是响应于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

在你的控制器顶部附近声明before action(以前是filter)是必要的。因为它是“before”,所以你的action代码没有用,如果有一行或更多的代码写着“before_filter.....”只需将其更改为“before_action”。这个代码可能甚至在你的ApplicationController中。 - Reuben Mallaby
只需使用查找和替换工具,将 before_filter 替换为 before_action。免费的 Atom 文本编辑器具有相当不错的查找和替换功能,可在整个项目目录中使用。否则,您可以使用 grep grep -rl before_filter app/controllers | xargs sed -i 's/before_filter/before_action/g' - max
2个回答

4

这只是一条折旧警告,如果您将应用程序升级到Rails 5.1,它可能会变成错误,在日志中明确说明,您可以通过搜索使用了before_filter的控制器并将其替换为before_action来解决它。

before_action在较早版本的Rails中与before_filter执行相同的操作(在请求到达控制器中的操作之前运行一些代码)。


0

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

无法验证CSRF令牌的真实性 是导致无法返回正确结果的实际错误。如果您的控制器不需要JSON请求的CSRF令牌,则应向控制器添加以下行:

skip_before_action :verify_authenticity_token, if: :json_request?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接