2016-08-05 32 views
4

Ich mache eine Zuweisung für eine Klasse und verwendet die Methode column_types in einem rspec-Test.Warum ist die Methode column_types in Rails 5.0 nicht definiert?

it "User database structure in place" do 
     expect(User.column_names).to include "password_digest", "username" 
     expect(User.column_types["username"].type).to eq :string 
     expect(User.column_types["password_digest"].type).to eq :string 
     expect(User.column_types["created_at"].type).to eq :datetime 
     expect(User.column_types["updated_at"].type).to eq :datetime 

Ende

Fehler: wenn i rpsec in der Befehlszeile ausführen.
Rails 5.0
Ubuntu 14.10

Ausfall/Fehler: erwarten (. User.column_types [ "username"] Typ) .to eq: string

NoMethodError: 
    undefined method `column_types' for #<Class:0x000000053a0188> 
    Did you mean? columns 
        column_names 
# ./spec/assignment_spec.rb:67:in `block (5 levels) in <top (required)>' 
# ./spec/assignment_spec.rb:14:in `block (2 levels) in <top (required)>' 
+0

hmm, es zu erhalten ist entfernt –

+0

@ArupRakshit 'Klasse Benutzer bluejimmy

Antwort

2

Die Methode wurde in this commit entfernt. Es ist nicht so einfach, es zu finden.

Aber der Grund ist nicht dokumentiert, es ist, weil die Methode selbst nicht dokumentiert ist (Vielleicht ist es nur für den internen Gebrauch).

Siehe this comment:nodoc: auf dem Verfahren, wenn es existiert:

def column_types # :nodoc: 
    @column_types ||= columns_hash.transform_values(&:cast_type).tap do |h| 
     h.default = Type::Value.new 
    end 
    end 

Sie können die commit's Beschreibung lesen Sie, warum und vielleicht sehen, zu verstehen, wenn es etwas, was Sie tun können.

EDIT

Werfen Sie einen Blick auf these lines vielleicht attributes_types oder columns_hash kann Ihr Problem lösen.

1

wie 5, in Schienen sieht column_types Methode nicht länger existieren

+0

Wie findet man das heraus? Ich habe gegoogelt und nichts dazu gesagt. Gibt es eine Website, auf der Methoden und Abwertungen überprüft werden können? – bluejimmy

+0

yeah, no body erwähnte es http://edgeguides.rubyonrails.org/5_0_release_notes.html#active-record-removals hier .. -_- –

3

Verfahren column_types in Rails entfernt 5.

Um die Art der Spalte erhalten Sie folgenden Code versuchen:

User.column_for_attribute('username').type 

dies die Art zurück, hier in Ihrem Fall: :string

0

können Sie diese verwenden, um einen Hash aller column_types

User.columns_hash.each_with_object({}) { |obj, h| h[obj[1].name] = obj[1].sql_type }