actionscript 3 - Activerecord Rails 4 perform something like a join that still returns rows that don't have the association -


if after reading question have suggestion better title, please add comment. having trouble succinctly saying wanted. have situation this.

class artist < activerecord::base   has_many :album_artists   has_many :albums, :through => :album_artists end class album < activerecord::base   has_many :album_artists   has_many :artists, :through => :album_artists end class albumarist < activerecord::base   belongs_to :album   belongs_to :artist end 

i want query on artists return result if either artist's name or album title artist associated match query. can achieve join.

artist.joins(:albums).where("artists.name ? or albums.title ?", query, query).uniq 

what know how return artists name matches query not happen have albums associated them. goal in single query, prefer not perform 2 sequential queries.

please ask more clarification if need it.

it seems left outer join looking for. created scopes in models this:

class artist < activerecord::base   has_many :album_artists   has_many :albums, :through => :album_artists    scope :joins_albums, -> {joins('left outer join "album_artists" on "album_artists"."artist_id" = "artists"."id" left outer join "albums" on "albums"."id" = "album_artists"."album_id"')} end 

i use scope in query:

artist.joins_albums.where("artists.name ? or albums.title ?", query, query).uniq 

now results include artists names match query if not have albums associated them.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -