Skip to content
This repository has been archived by the owner on Dec 12, 2021. It is now read-only.

NoMethodError: undefined method `sanitize' with Rails 5.1.0.rc2 #30

Open
Kuchitama opened this issue Apr 27, 2017 · 3 comments
Open

NoMethodError: undefined method `sanitize' with Rails 5.1.0.rc2 #30

Kuchitama opened this issue Apr 27, 2017 · 3 comments

Comments

@Kuchitama
Copy link

I got below error.

$ rails db:seed

rails aborted!
NoMethodError: undefined method `sanitize' for #<Class:0x000000034e8ba0>
/home/k2/.rvm/gems/ruby-2.4.0/gems/activerecord-5.1.0.rc2/lib/active_record/dynamic_matchers.rb:22:i
n `method_missing'
/home/k2/.rvm/gems/ruby-2.4.0/gems/populator-1.0.0/lib/populator/factory.rb:85:in `block (2 levels) 
in rows_sql_arr'
/home/k2/.rvm/gems/ruby-2.4.0/gems/populator-1.0.0/lib/populator/factory.rb:85:in `map'
/home/k2/.rvm/gems/ruby-2.4.0/gems/populator-1.0.0/lib/populator/factory.rb:85:in `block in rows_sq$
_arr'
/home/k2/.rvm/gems/ruby-2.4.0/gems/populator-1.0.0/lib/populator/factory.rb:84:in `map'
/home/k2/.rvm/gems/ruby-2.4.0/gems/populator-1.0.0/lib/populator/factory.rb:84:in `rows_sql_arr'
...

I'm using rails that versioned 5.1.0.rc2 .

and I tried with 5.0.2, db:seed passed.
this problem occurs only rails 5.1.0.rc2.

@sehgalmayank001
Copy link

sehgalmayank001 commented Aug 9, 2017

NoMethodError: undefined method sanitize' for #Class:0x00000006c7fbb8
/home/vagrant/.rvm/gems/ruby-2.4.1/gems/activerecord-5.1.3/lib/active_record/dynamic_matchers.rb:22:in method_missing' /home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:85:in block (2 levels) in rows_sql_arr'
/home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:85:in map' /home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:85:in block in rows_sql_arr'
/home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:84:in map' /home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:84:in rows_sql_arr'
/home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:61:in save_records' /home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:54:in block in build_records'
/home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:50:in times' /home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:50:in build_records'
/home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:43:in block in populate' /home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:29:in remember_depth'
/home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/factory.rb:42:in populate' /home/vagrant/.rvm/gems/ruby-2.4.1/gems/populator-1.0.0/lib/populator/model_additions.rb:25:in populate'`

i used rake db:populate and got the above error, after unpacking gem i saw sanitize method still being called.

@fulvi0
Copy link

fulvi0 commented Sep 10, 2017

I'm facing the same issue reported, the rails version is 5.1.4

→ rails db:seed

rails aborted!
NoMethodError: undefined method `sanitize' for #<Class:0x007fb8f28082e0>
/Users/fulvio/Developer/projects/dganga/vendor/bundle/gems/activerecord-5.1.4/lib/active_record/dynamic_matchers.rb:22:in `method_missing'
/Users/fulvio/Developer/projects/dganga/vendor/bundle/gems/populator-1.0.0/lib/populator/factory.rb:85:in `block (2 levels) in rows_sql_arr'
/Users/fulvio/Developer/projects/dganga/vendor/bundle/gems/populator-1.0.0/lib/populator/factory.rb:85:in `map'
/Users/fulvio/Developer/projects/dganga/vendor/bundle/gems/populator-1.0.0/lib/populator/factory.rb:85:in `block in rows_sql_arr'
/Users/fulvio/Developer/projects/dganga/vendor/bundle/gems/populator-1.0.0/lib/populator/factory.rb:84:in `map'
/Users/fulvio/Developer/projects/dganga/vendor/bundle/gems/populator-1.0.0/lib/populator/factory.rb:84:in `rows_sql_arr'
/Users/fulvio/Developer/projects/dganga/vendor/bundle/gems/populator-1.0.0/lib/populator/factory.rb:61:in `save_records'
/Users/fulvio/Developer/projects/dganga/vendor/bundle/gems/populator-1.0.0/lib/populator/factory.rb:19:in `block in save_remaining_records'

It passed with the solution of @norikt, thx!

   def rows_sql_arr
      @records.map do |record|
        quoted_attributes = record.attribute_values.map { |v| @model_class.connection.quote(v) }
        "(#{quoted_attributes.join(', ')})"
      end
    end

stephancom added a commit to stephancom/populator that referenced this issue Mar 19, 2018
@willkoehler
Copy link

This has been fixed in a few forks of Populator. But if you want to keep using the original Populator, you can monkey-patch in a solution. Create a file populator_fixes.rb with contents:

module Populator
  # Builds multiple Populator::Record instances and saves them to the database
  class Factory
    def rows_sql_arr
      @records.map do |record|
        quoted_attributes = record.attribute_values.map { |v| @model_class.connection.quote(v) }
        "(#{quoted_attributes.join(', ')})"
      end
    end
  end
end

and then require it before using Populator

require 'populator_fixes.rb'

# ... do populate stuff here

mtoupsUNO added a commit to mtoupsUNO/Autolab that referenced this issue Jun 6, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants