2016-04-07 12 views
0

Modellerimden veri almanın yollarını bulmakta zorlanıyorum. İki model arasında bir has_many ilişkisi var. Kullanıcı & Olay. Bağlantı tablosunu yaptım çünkü bağlantı tablosunda saklanacak ek bilgilere ihtiyacım vardı. Sorun şu ki, bağlantı tablosundan veri alamıyorum.ActiveRecord'un birleştirme tabloları ve bilgi toplama [RAILS]

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 

Ve bağlantı tablosunda:

Benim modelleri şunlardır olanlar modeller için

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

Benim db şema: İçinden Bunu test etmek çalışıyorum

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 

önce konsol (veri tabanı üzerinde veri var) Bu verileri daha sonra bir masa üzerinde göstermek için toplamaya çalışıyorum.

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

Ama bu bana verilerin karışımını verir:

denedim. Ancak, bağlantı tablosunda (event_users) bulunan pozisyon alanını vermez.

Verileri almak için sorgu ile mümkünse yardım isterim. Şimdiden teşekkürler.

+0

Yani tüm kullanıcıları ve tüm olayları ister misin? – trh

+0

Üzgünüz, Kullanıcılar bilgilerini, event_users ve olay bilgilerini istiyorum. – Nikos4Life

+0

Gerçekten nasıl kullanmak istediğinize bağlıdır - çünkü User.all.each {| kullanıcı | user.events} – trh

cevap

0

bu deneyin:

users = User.joins(event_users: :event) 

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

Bu bana şu hatayı veriyor: [145] pry (main)> users.each {| kullanıcı | user.event_users.position} NoMethodError: # Nikos4Life

+0

@ Nikos4Life Yanıtı güncelledim, sadece bir deneme yapabilirsiniz. – dp7

+0

çalışmıyor:/'[156] pry (main)> users = Kullanıcı.joins (event_users:: events) => # ' – Nikos4Life