tatmin katılır:ActiveRecord koşulu Böyle bir veritabanı modeli olan tüm ilişkilerini
İstediğim sorgu o zaten oy henüz belirli bir kullanıcı için tümposts
olan
Post
has_many :votes
belongs_to :user
User
has_many :posts
has_many :votes
Vote
belongs_to :post
belongs_to :user
.
böyle denedim:1
sadece bir örnektir kullanıcı kimliği olan
Post.left_outer_joins(:votes).where.not(votes: { user_id: 1 })
.
Sorun, bu sorgunun user_id
'un 1
olmadığı en az bir oyu olan tüm posts
getirdiği görünüyor.
Ancak birden fazla kullanıcı bu yayınlar için oy kullanacağı için, birden fazla oylama olduğunda, tüm kullanıcılar şu anda tüm Mesajları alacak. joins
doğru yaklaşım ise
Bilmiyorum ama İngilizce benim Sorgu olacaktır:
bana oyların hiçbiri 1
mi bir user_id olan tüm Mesajını ver Daha önce oy vermediği bir kullanıcı için sadece posts
'u almak mümkün mü?
DÜZENLEME:
yukarıdaki üç tablo Benim veritabanı şeması:
Oy:
CREATE TABLE "votes" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"post_id" integer,
"user_id" integer,
"created_at" datetime NOT NULL,
"updated_at" datetime NOT NULL,
"vote_type" integer DEFAULT 0);
CREATE INDEX "index_votes_on_post_id" ON "votes" ("post_id");
CREATE INDEX "index_votes_on_user_id" ON "votes" ("user_id");
Mesajlar:
CREATE TABLE "posts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"photo_gcs_key" varchar, "photo_gcs_bucket" varchar,
"user_id" integer, "campaign_id" integer,
"created_at" datetime NOT NULL,
"updated_at" datetime NOT NULL);
CREATE INDEX "index_images_on_user_id" ON "images" ("user_id");
CREATE INDEX "index_images_on_campaign_id" ON "images" ("campaign_id");
kullanıcılar:
CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"uid" varchar, "display_name" varchar, "email" varchar,
"photo_url" varchar, "photo_gcs_key" varchar,
"photo_gcs_bucket" varchar, "user_name" varchar,
"created_at" datetime NOT NULL,
"updated_at" datetime NOT NULL);
Eğer kullanıcı tarafından oluşturulan mesajları görmezden umurumda değil eğer
Yukarıdaki üç tablonun şemasını gönderebilir misiniz? – 1000111
@ 1000111 Ne demek istiyorsun? İlk birkaç satır, tablolar arasındaki ilişkileri göstermektedir. Başka neye ihtiyacın var? – Ybrin
bu sorgunun çıktısını yapıştır: 'show tablosu oluştur' –
1000111