【问题标题】:How to add raw_filter method to ruby ​on rails 7?如何将 raw_filter 方法添加到 ruby​​ on rails 7?
【发布时间】:2021-12-12 01:22:59
【问题描述】:

在 rails 7 中,我使用 gem 'activerecord-import' 将数据导入我的数据库并避免多次插入,例如:

  my_books = []
  10.times do |i|
    my_books << Book.new(name: "book #{i}")
  end

  # In the line below the error appears
  Book.import my_books

当我运行代码时:

Book.import my_books

我收到以下错误:

undefined method `raw_filter' for #<ActiveSupport::Callbacks::Callback:0x000055e21adb4ed8 @chain_config={:scope=>:name, :terminator=>#<Proc:0x000055e21ac126e8 /usr/local/bundle/bundler/gems/rails-2432988f9fc0/activesupport/lib/active_support/callbacks.rb:589>}, @name=:validate, @kind=:before, @filter=:cant_modify_encrypted_attributes_when_frozen, @if=[#<Proc:0x000055e21adb5428 /usr/local/bundle/bundler/gems/rails-2432988f9fc0/activerecord/lib/active_record/encryption/encryptable_record.rb:13 (lambda)>], @unless=[]

出现该错误是因为 Rails 7 从 ActiveSupport::Callbacks::Callback 中删除了 raw_filter 方法,这会在调用 import 时触发未定义的方法错误

如果您能帮我解决这个错误,我将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby activerecord rubygems activesupport


    【解决方案1】:

    在 gem 中看起来像这样issue has already been fixed,但更新版本尚未发布。

    我认为你基本上有两种选择:

    1. 等待更新版本发布。如果您可以提供帮助,请询问维护人员。或者
    2. 您可能希望直接从 GitHub 的 master 分支而不是 Rubygems 安装最新版本。但请记住,您当然希望在正式发布完成后切换回 Rubygems 版本。

    如果您想从 GitHub 安装 gem,只需将 Gemfile 中带有 gem 的行更新为:

    gem 'activerecord-import', github: 'zdennis/activerecord-import'
    

    【讨论】:

    • 是的,我的设计也发生了同样的事情,直到他们修复了错误并合并。非常感谢您的时间和解决方案,它对我有用:D
    • 是的,最好尽快更新您的应用程序并在最新的 Rails 版本上运行它。但这通常是不可能的,因为某些 gem 可能还没有为最新版本做好准备。因此,请小心向您的应用程序添加依赖项,并在它们阻塞您太长时间时尽早替换依赖项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多