@@ -26,6 +26,7 @@ create_table :users do |t|
26
26
t.string :name
27
27
t.string :password
28
28
t.string :age
29
+ t.boolean :not_nerd
29
30
end
30
31
31
32
create_table :people do |t|
38
39
User.create email: Faker::Internet.email,
39
40
name: Faker::Name.name,
40
41
password: '123456',
41
- age: rand(12..90)
42
+ age: rand(12..90),
43
+ not_nerd: true
42
44
end
43
45
44
46
```
45
47
46
48
### List of methods
47
- * bind
48
49
* create_with
49
50
* eager_load
50
51
* extending
51
52
* from
52
- * group
53
+ * group +
53
54
* having
54
55
* includes
55
56
* joins
56
- * limit
57
+ * limit +
57
58
* lock
58
- * none
59
- * offset
60
- * order
59
+ * none +
60
+ * offset +
61
+ * order +
61
62
* preload
62
63
* readonly
63
64
* references
64
65
* reorder +
65
- * reverse_order
66
- * select
67
- * distinct
68
- * uniq
66
+ * reverse_order +
67
+ * select +
68
+ * distinct +
69
+ * uniq +
69
70
* where
70
71
71
72
```
@@ -77,9 +78,8 @@ User.find_by(age: 18)
77
78
User.find_or_create_by(email: 'ololol@mail.ru')
78
79
79
80
User.limit(10)
80
- User.limit(10).offset(10)
81
- User.order(:age).limit(10)
82
- User.order('age DESC')
81
+ User.offset(10)
82
+ User.order(:age)
83
83
```
84
84
85
85
```
@@ -88,11 +88,78 @@ scope = scope.offset(10)
88
88
scope = scope.order(:age)
89
89
scope.reorder(:email).all
90
90
91
+ User.limit(4).to_sql
92
+ User.limit(4).unscoped.to_sql
93
+ User.limit(4).unscoped.none.to_sql
94
+
95
+ ```
96
+
97
+ ```
98
+ User.order(:age).reverse_order
99
+ User.limit(5).select(:name)
100
+ User.limit(5).pluck(:name)
101
+ User.select(:age).distinct
102
+ User.select(:age).uniq
103
+ User.group(:age).select('COUNT(*) as number, age as age')
104
+ Hash[User.group(:age).select('COUNT(*) as number, age as age').map {|u| [u.age, u.number]}]
105
+ Hash[User.group(:age, :id).having('age > 18').map {|u| [u.age, u.number]}]
106
+ Hash[User.group(:age, :id).having('age > 18').select('COUNT(*) as number, age as age').map {|u| [u.age, u.number]}]
107
+
108
+ ```
109
+
110
+ ```
111
+ User.where(age: 18)
112
+ User.where(age: 18).where(password: '1234')
113
+ User.where(age: 18, email: 'lol@gmail.com')
114
+ age=18; User.where('age >= #{age}');
115
+ User.where('age >= ?', 18)
116
+ Usere.where('age >= ? OR email ILIKE ?, 18, 'test@gmail.com')
117
+ User.where('age < :age, create_at >= :date', {age: 18, date: Time.zone.now})
118
+
91
119
```
92
120
93
121
94
122
## Validations
95
123
124
+
125
+ * model.errors
126
+ * model.valid? || model.invalid?
127
+ * shebang methods
128
+ * skipping validations
129
+
130
+
131
+ ```
132
+ class User < ActiveRecord::Base
133
+ validates_presense_of :name
134
+ validates :name, presence: true
135
+ validates :name, absence: true
136
+ validates :not_nerd, acceptance: true
137
+ # validates :email, confirmation: true
138
+ validates :email, format: { with: Devise.regexp}
139
+ validates :not_nerd, inclusion: { in:[true, false]}
140
+ validates :name, length: { minimum: 5, maximum: 120 }
141
+ validates :age, numericality: { only_integer: true, greater_than: 0 }
142
+ validates :name, uniqueness: { scope: :email, case_sensitive: false }
143
+ validates :name, presence: true, if:
144
+
145
+ end
146
+
147
+ class GoodnessValidator < ActiveModel::Validator
148
+ def validate(record)
149
+ if record.name =~ "Evil"
150
+ record.errors[:base] << "This person is evil"
151
+ end
152
+ end
153
+ end
154
+
155
+ class User < ActiveRecord::Base
156
+ validates_with GoodnessValidator
157
+ end
158
+
159
+
160
+ ```
161
+
162
+
96
163
## Relations
97
164
98
165
* (table_name)_ count - Used to cac* he the number of belonging objects on associations.
0 commit comments