Ich möchte eine Activerecord-Abfrage schreiben, die so etwas wie dies verhält:Gibt es eine Möglichkeit, nach leeren Arrays zu suchen, die von ActiveRecord-Abfragen zurückgegeben werden?
User.joins(:comment).where(comments: {replies: []})
die Benutzer gibt, wo ihre Kommentare keine Antworten haben.
User.first.comment.first.replies => [] returns an empty array
Ich brauche dies nur eine ActiveRecord-Beziehung, also wird die Verwendung von Ruby-Code nicht funktionieren. Gibt es eine Möglichkeit, mit ActiveRecord nach leeren Arrays zu suchen?
Edit: Beispiel Schema
create_table "users", force: :cascade do |t|
t.string "email",
t.string "password"
end
create_table "comments" do |t|
t.string "content"
end
create_table "replies" do |t|
t.string "content"
end
User.rb
class User < ActiveRecord::Base
has_many :comments
end
Comment.rb
class Comment < ActiveRecord::Base
belongs_to :user
has_many :replies
end
Reply.rb
class Reply < ActiveRecord::Base
belongs_to :comment
belongs_to :user
end
Dies sind nur Beispielmodelle, aber dies sollte das Problem mit Modellen veranschaulichen, die diese damit verbinden.
Wenn also ein Benutzer (mit der ID 1) 3 Kommentare erstellt hat und nur 1 dieser 3 Kommentare eine Antwort darauf hat, wie würde ich die anderen 2 Kommentare in einer ActiveRecord-Beziehung erhalten?
Könnten Sie bitte das Schema für die Kommentartabelle posten? – SRack
Die Modelle, die ich verwendete, waren nur Beispiele, aber ich kann ein Beispielschema mit diesen Modellen erstellen, wenn das hilfreich ist. – JimmyW
Ich war hauptsächlich daran interessiert, die Antworten Spalte und wie es gespeichert ist (/ wenn ich Missverständnisse und es ist eine andere Tabelle) zu erfassen. Ich kann Ihnen ein Beispiel geben, wie das funktioniert, aber um den optimalen Ansatz zu erhalten, würde ich ein bisschen mehr brauchen, wie die Daten gespeichert sind. Bearbeiten: auch gut sein, um die Modellstruktur und wie die Tabellen zugeordnet sind. – SRack