Created
April 18, 2018 16:37
-
-
Save vsyrovat/d54b63980c966f0bfe89b67e212886d3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
rails new demo && cd demo | |
rails g scaffold parent name:string age:integer | |
rails g scaffold toy parent_id:integer | |
""" прописываем belongs_to и has_many в моделях """ | |
rake db:migrate | |
""" наполняем данными через веб-морду """ | |
rails c | |
1. Parent.where(name: 'John').all или Parent.where(name: 'John') или Parent.where(name: 'John').find_each | |
2. Parent.where(age: 35) | |
3. Parent.where("age >= ?", 35) | |
4. Parent.where("created_at < ?", Date.new(2018,1,1)) | |
5. Toy.where(parent_id: 4) | |
6. Toy.where(parent: Parent.where(name: 'Bob')) | |
7. Toy.where(parent: Parent.where('age <= ?', 35)) | |
8. Parent.order(:name) | |
9. Parent.find_by_age(16) | |
10. Toy.where(parent: nil) | |
11. Parent.includes(:toys).where(toys: {id: nil}) | |
12. Тут я не понял. Удалить все игрушки, которые сами старше 18 или родителям которых больше 18 лет? Наверное, второе. | |
Toy.where(parent: Parent.where('age > ?', 18)).destroy_all | |
13. В зависимости от того, выбирать ли родителей без игрушек. Если выбирать, то смотря как их сортировать. | |
Parent.all.sort_by {|parent| parent.toys.order(:name).take[:name] } | |
либо | |
Parent.all.each{|p| p.toys }.select{|parent| parent.toys.count > 0 }.sort_by {|parent| parent.toys.order(:name).take[:name] } | |
Но эффективнее всего конечно же одним запросом | |
Parent.find_by_sql( | |
"select parents.* | |
from parents | |
join toys on (toys.parent_id=parents.id) | |
group by toys.parent_id | |
order by min(toys.name)" | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment