2016-04-07 17 views
0

Ich habe Probleme mit der Suche nach dem Weg, um die Daten von meinen Modellen zu bekommen. Ich habe eine Beziehung has_many durch zwischen zwei Modellen. Benutzer & Ereignis. Ich habe die Verknüpfungstabelle erstellt, weil ich zusätzliche Informationen benötigt habe, die in der Verknüpfungstabelle gespeichert werden. Das Problem ist, dass ich die Daten aus der Verknüpfungstabelle nicht abrufen kann.ActiveRecord verbindet Tabellen und sammelt Informationen [RAILS]

Meine Modelle sind die folgenden:

class User < ActiveRecord::Base 
    has_many :event_users 
    has_many :events, through: :event_users 
end 


class Event < ActiveRecord::Base 
    has_many :event_users 
    has_many :users, through: :event_users 
end 

Und die Verknüpfungstabelle:

class EventUser < ActiveRecord::Base 
    belongs_to :event 
    belongs_to :user 
end 

Mein db Schema für diese Modelle:

create_table "users", force: :cascade do |t| 
    t.text  "email",     default: "", null: false 
    t.text  "encrypted_password",  default: "", null: false 
    t.text  "reset_password_token" 
    t.datetime "reset_password_sent_at" 
    t.datetime "remember_created_at" 
    t.integer "sign_in_count",   default: 0, null: false 
    t.datetime "current_sign_in_at" 
    t.datetime "last_sign_in_at" 
    t.text  "current_sign_in_ip" 
    t.text  "last_sign_in_ip" 
    t.datetime "created_at",       null: false 
    t.datetime "updated_at",       null: false 
    t.text  "steam_id_64" 
    t.text  "nick" 
    t.text  "name" 
    t.integer "age" 
    t.text  "country" 
    t.text  "city" 
    t.text  "gender" 
    t.boolean "admin" 
end 

create_table "events", force: :cascade do |t| 
    t.text  "event_type" 
    t.text  "name",   null: false 
    t.datetime "starting_date" 
    t.datetime "ending_date" 
    t.integer "eventable_id" 
    t.text  "eventable_type" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
end 

create_table "event_users", force: :cascade do |t| 
    t.integer "event_id" 
    t.integer "user_id" 
    t.integer "position" 
    t.integer "score_points" 
    t.text "team_name" 
    t.integer "team_score_points" 
end 

ich dies zu testen versuche durch Konsole zuerst (Ich habe Daten auf der Datenbank arbeiten) Ich versuche, diese Daten zu sammeln, um es später auf einer Tabelle anzuzeigen.

Ich habe versucht:

User.joins(:events).select('*') 

Aber es gibt mir eine Mischung aus Daten. Aber es gibt nicht das Positionsfeld auf der Verknüpfungstabelle (event_users).

Ich möchte Hilfe wenn möglich mit der Abfrage, um die Daten zu erhalten. Danke im Voraus.

+0

So möchten Sie alle Benutzer und alle Veranstaltungen? – trh

+0

Nein Entschuldigung, ich möchte die Benutzerinfo, event_users info und event info. – Nikos4Life

+0

Es hängt wirklich davon ab, wie Sie es verwenden möchten - weil Sie User.all.each {| user | user.events} – trh

Antwort

0

Try this:

users = User.joins(event_users: :event) 

users.select("event_users.position") 
+0

Das gibt mir diesen Fehler: '[145] pry (main)> users.each {| user | user.event_users.position} NoMethodError: undefinierte Methode 'position 'für # ' – Nikos4Life

+0

@ Nikos4Life Ich habe die Antwort aktualisiert, können Sie es einfach versuchen. – dp7

+0

funktioniert nicht:/'[156] pry (main)> Benutzer = User.joins (event_users:: Ereignisse) => # ' – Nikos4Life

Verwandte Themen