2016-06-18 2 views
1

Nachdem ein Problem mit has_many und belongs_to, ich habe diese beiden Modelle:Feld `Struct` in` where` existiert nicht in der Modellquelle in Abfrage

@primary_key {:guid, :integer, []} 
    schema "characters" do 
    field :name, :string 
    field :race, :integer 
    field :class, :integer 
    field :gender, :integer 
    field :level, :integer 
    field :xp, :integer 
    field :money, :integer 
    field :online, :integer 
    field :totaltime, :integer 
    field :leveltime, :integer 
    field :rest_bonus, :float 
    field :is_logout_resting, :integer 
    field :honor_highest_rank, :integer 
    field :honor_standing, :integer 
    field :stored_honor_rating, :float 
    field :stored_dishonorable_kills, :integer 
    field :stored_honorable_kills, :integer 
    field :health, :integer 
    field :power1, :integer 
    field :power2, :integer 
    field :power3, :integer 
    field :power4, :integer 
    field :power5, :integer 
    belongs_to :account, Pugit.Account, references: :id 
    end 

Und dieses Konto Modell

schema "account" do 
    field :username, :string 
    field :sha_pass_hash, :string 
    field :gmlevel, :integer, default: 0 
    field :sessionkey, :string 
    field :v, :string 
    field :s, :string 
    field :email, :string 
    field :joindate, Ecto.DateTime 
    field :last_ip, :string, default: "0.0.0.0" 
    field :failed_logins, :integer, default: 0 
    field :locked, :integer, default: 0 
    field :last_login, Ecto.DateTime 
    field :active_realm_id, :integer, default: 0 
    field :expansion, :integer, default: 0 
    field :mutetime, :integer, default: 0 
    field :locale, :integer, default: 0 

    has_many :characters, PugitWow.Character, foreign_key: :account 
    end 

ich versuche, diese Abfrage auszuführen:

Pugit.AccountRepo.all(Pugit.Account) |> Pugit.CharRepo.preload([:characters]) 

Der einzige hier große Unterschied, dass vielleicht ist I ‚Versuchte aus einem anderen Repo (andere Datenbank)

Aber ich diese Fehler vorzuzuladen:

** (Ecto.QueryError) deps/ecto/lib/ecto/association.ex:320: field `Pugit.Character.account` in `where` does not exist in the model source in query: 

from c in Pugit.Character, 
    where: c.account in ^[1, 2, 3, 4, 21], 
    order_by: [asc: c.account] 

    (elixir) lib/enum.ex:1473: Enum."-reduce/3-lists^foldl/2-0-"/3 
    (elixir) lib/enum.ex:1151: Enum."-map_reduce/3-lists^mapfoldl/2-0-"/3 
     (ecto) lib/ecto/repo/queryable.ex:91: Ecto.Repo.Queryable.execute/5 
     (ecto) lib/ecto/repo/queryable.ex:15: Ecto.Repo.Queryable.all/4 
    (elixir) lib/enum.ex:1088: Enum."-map/2-lists^map/1-0-"/2 

Alle Informationen würden großer Dank

Der Primärschlüssel für meinen characters Tisch ist guid

Der Fremdschlüssel für meine characters Tabelle ist account

Der Primärschlüssel f oder meine account Tabelle ist id

+0

Warum haben Sie 'define_fields: false' in' belongs_to: account'? Funktioniert das, wenn Sie das entfernen? – Dogbert

+0

@Dogbert Nein, tut es nicht traurig, tut mir leid, fügte ich hinzu, wenn Sie versuchen, herumzualbern mit dem Versuch, es zur Arbeit – Datsik

+0

Haben die 'Zeichen' Tabelle in Ihrer Datenbank' account' Feld oder 'account_id'? – Dogbert

Antwort

2

Dies geschieht, weil Ihr account Verein die gleichen Namen wie das Feld für den Fremdschlüssel verwendet, account. Benennen Sie das Feld zu account_id, und diese dann als Ihr Verband verwenden:

belongs_to :account, Pugit.Account 
Verwandte Themen