2016-07-29 4 views
0

Ich habe ein Benutzer und Anzeigen Tabelle, deren Schema ist unten:Mein RSpec Test NoMethodError für einen meiner Active Verbände hält Rückkehr

create_table "users", force: :cascade do |t| 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.string "name" 
    end 

    create_table "listings", force: :cascade do |t| 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.string "name" 
    t.string "address" 
    t.string "listing_type" 
    t.string "title" 
    t.string "description" 
    t.integer "price" 
    t.integer "neighborhood_id" 
    t.integer "host_id" 
    t.string "host" 
    end 

Und meine Modelle für die Kotierung und Benutzer sind unten:

class Listing < ActiveRecord::Base 
    belongs_to :neighborhood 
    belongs_to :hosts, :class_name => "User" 
end 

class User < ActiveRecord::Base 
    has_many :listings, :foreign_key => 'host_id' 
end 

Aber wenn ich meine RSpec Tests laufen lasse, empfange ich das folgende NoM ethodError:

1) Listing belongs to a host 
    Failure/Error: expect(listing.host.name).to eq("Amanda") 
    NoMethodError: 
     undefined method `name' for "#<User:0x007fc885001838>":String 

Jede Hilfe wird sehr geschätzt.

Antwort

0

Sie haben host String-Spalte in listings Tabelle.
So gibt listing.host einen String aus dieser Spalte zurück. Dann rufst du name an.
Natürlich gibt es keine solche Methode.

Ich denke, Sie haben eine falsche Zuordnung. Versuchen

belongs_to :host, :class_name => "User" 

nicht hosts.

Und entfernen Sie t.string "host" von listings Tabelle.

+0

Danke! Das war's! –

Verwandte Themen