2

I need to write a SQL query in Rails 3.2 syntax that says:

"Give me all Submissions with missions that belong to a track where visibility_private == false"

Track.rb
   has_many :missions
   attr_accessible :visibility_private

Mission.rb
   belongs_to :track
   has_many :submissions

Submission.rb
   belongs_to :mission

My initial attempt was this, but that's definitely wrong:

Submission.joins(:mission).where(:missions => { mission.track.visibility_private == false })
Xyz
  • 5,955
  • 5
  • 40
  • 58
Jack Zerby
  • 135
  • 2
  • 8
  • My initial attempt was this, but that's definitely wrong: `Submission.joins(:mission).where(:missions => { mission.track.visibility_private == false })` – Jack Zerby Jan 23 '17 at 17:18
  • Try `Submission.joins(:mission, :track).where(:mission => { :track => { visibility_private: false } })` – Eyeslandic Jan 23 '17 at 17:33
  • Maybe this Q/A can help: http://stackoverflow.com/questions/23633301/how-to-query-a-model-based-on-attribute-of-another-model-which-belongs-to-the-fi/23633352#23633352 – MrYoshiji Jan 23 '17 at 18:29
  • Im getting `ActiveRecord::ConfigurationError: Association named 'track' was not found on Submission; perhaps you misspelled it?` – Jack Zerby Jan 23 '17 at 18:33
  • 1
    Try this: `Submission.includes(mission: :track).where(tracks: { visibility_private: false })` – MrYoshiji Jan 23 '17 at 18:39
  • Got it! It was this: `Submission.joins(:mission => :track).where(:tracks => { :visibility_private => false })` – Jack Zerby Jan 23 '17 at 18:52

2 Answers2

0

You need to use something like,

Submission.joins(mission: :track).where("tracks.visibility_private = ?",false)

or

Submission.joins(mission: :track).where(tracks: { visibility_private: false })

Hope this will work for you.

Jai Chauhan
  • 4,035
  • 3
  • 36
  • 62
0

try this code

Submission.includes(mission: :track).where(tracks: { visibility_private: false })
Foram
  • 483
  • 5
  • 12