composite_primary_keys 12.0.2 → 12.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +880 -841
  3. data/README.rdoc +180 -179
  4. data/lib/composite_primary_keys/active_model/attribute_assignment.rb +19 -0
  5. data/lib/composite_primary_keys/arel/sqlserver.rb +1 -3
  6. data/lib/composite_primary_keys/associations/association_scope.rb +68 -68
  7. data/lib/composite_primary_keys/associations/join_dependency.rb +103 -103
  8. data/lib/composite_primary_keys/associations/through_association.rb +2 -1
  9. data/lib/composite_primary_keys/attribute_methods/primary_key.rb +13 -0
  10. data/lib/composite_primary_keys/attribute_methods/read.rb +30 -30
  11. data/lib/composite_primary_keys/attribute_methods/write.rb +35 -35
  12. data/lib/composite_primary_keys/attribute_methods.rb +9 -9
  13. data/lib/composite_primary_keys/base.rb +141 -130
  14. data/lib/composite_primary_keys/composite_arrays.rb +0 -8
  15. data/lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb +37 -17
  16. data/lib/composite_primary_keys/connection_adapters/sqlserver/database_statements.rb +44 -23
  17. data/lib/composite_primary_keys/core.rb +48 -48
  18. data/lib/composite_primary_keys/persistence.rb +82 -81
  19. data/lib/composite_primary_keys/reflection.rb +29 -29
  20. data/lib/composite_primary_keys/relation/batches.rb +1 -1
  21. data/lib/composite_primary_keys/relation/calculations.rb +81 -81
  22. data/lib/composite_primary_keys/relation/finder_methods.rb +235 -235
  23. data/lib/composite_primary_keys/relation/predicate_builder/association_query_value.rb +20 -20
  24. data/lib/composite_primary_keys/relation/query_methods.rb +42 -42
  25. data/lib/composite_primary_keys/relation/where_clause.rb +23 -23
  26. data/lib/composite_primary_keys/relation.rb +193 -118
  27. data/lib/composite_primary_keys/version.rb +8 -8
  28. data/lib/composite_primary_keys.rb +117 -118
  29. data/test/abstract_unit.rb +114 -113
  30. data/test/connections/databases.ci.yml +22 -19
  31. data/test/fixtures/article.rb +4 -0
  32. data/test/fixtures/articles.yml +4 -3
  33. data/test/fixtures/comment.rb +1 -3
  34. data/test/fixtures/comments.yml +10 -9
  35. data/test/fixtures/db_definitions/db2-create-tables.sql +112 -126
  36. data/test/fixtures/db_definitions/db2-drop-tables.sql +17 -19
  37. data/test/fixtures/db_definitions/mysql.sql +180 -217
  38. data/test/fixtures/db_definitions/oracle.drop.sql +42 -48
  39. data/test/fixtures/db_definitions/oracle.sql +200 -236
  40. data/test/fixtures/db_definitions/postgresql.sql +183 -220
  41. data/test/fixtures/db_definitions/sqlite.sql +170 -206
  42. data/test/fixtures/db_definitions/sqlserver.sql +176 -212
  43. data/test/fixtures/department.rb +16 -11
  44. data/test/fixtures/departments.yml +15 -15
  45. data/test/fixtures/employees.yml +27 -27
  46. data/test/fixtures/readings.yml +2 -2
  47. data/test/fixtures/restaurants_suburbs.yml +11 -11
  48. data/test/fixtures/streets.yml +16 -16
  49. data/test/fixtures/suburbs.yml +14 -14
  50. data/test/fixtures/user.rb +11 -10
  51. data/test/test_associations.rb +358 -351
  52. data/test/test_attributes.rb +60 -60
  53. data/test/test_calculations.rb +42 -42
  54. data/test/test_create.rb +218 -183
  55. data/test/test_delete.rb +182 -179
  56. data/test/test_exists.rb +39 -39
  57. data/test/test_find.rb +164 -145
  58. data/test/test_habtm.rb +2 -2
  59. data/test/test_ids.rb +112 -116
  60. data/test/test_nested_attributes.rb +67 -124
  61. data/test/test_polymorphic.rb +29 -13
  62. data/test/test_preload.rb +4 -3
  63. data/test/test_serialize.rb +2 -2
  64. data/test/test_update.rb +96 -78
  65. metadata +4 -19
  66. data/test/fixtures/hack.rb +0 -5
  67. data/test/fixtures/hacks.yml +0 -3
  68. data/test/fixtures/pk_called_id.rb +0 -5
  69. data/test/fixtures/pk_called_ids.yml +0 -11
  70. data/test/fixtures/reference_code_using_composite_key_alias.rb +0 -8
  71. data/test/fixtures/reference_code_using_simple_key_alias.rb +0 -8
  72. data/test/fixtures/seat.rb +0 -5
  73. data/test/fixtures/seats.yml +0 -9
  74. data/test/fixtures/topic.rb +0 -6
  75. data/test/fixtures/topic_source.rb +0 -7
  76. data/test/test_aliases.rb +0 -18
  77. data/test/test_enum.rb +0 -21
  78. data/test/test_suite.rb +0 -35
@@ -1,213 +1,177 @@
1
- USE [composite_primary_keys_unittest];
2
-
3
- CREATE TABLE topics (
4
- id [int] IDENTITY(1000,1) NOT NULL,
5
- name [varchar](50) default NULL,
6
- feed_size [int] default NULL
7
- );
8
-
9
- CREATE TABLE topic_sources (
10
- topic_id [int] NOT NULL,
11
- platform [varchar](50) NOT NULL,
12
- keywords [varchar](50) default NULL,
13
- );
14
-
15
- CREATE TABLE reference_types (
16
- reference_type_id [int] IDENTITY(1000,1) NOT NULL,
17
- type_label [varchar](50) NULL,
18
- abbreviation [varchar](50) NULL,
19
- description [varchar](50) NULL
20
- );
21
-
22
- CREATE TABLE reference_codes (
23
- reference_type_id [int],
24
- reference_code [int],
25
- code_label [varchar](50) NULL,
26
- abbreviation [varchar](50) NULL,
27
- description [varchar](50) NULL
28
- );
29
-
30
- CREATE TABLE products (
31
- id [int] IDENTITY(1000,1) NOT NULL,
32
- name [varchar](50) NULL
33
- );
34
-
35
- CREATE TABLE tariffs (
36
- [tariff_id] [int],
37
- [start_date] [date],
38
- [amount] [int] NULL,
39
- [created_at] [datetimeoffset](7) NOT NULL,
40
- [updated_at] [datetimeoffset](7) NOT NULL
41
- CONSTRAINT [tariffs_pk] PRIMARY KEY
42
- ( [tariff_id], [start_date] )
43
- );
44
-
45
- CREATE TABLE product_tariffs (
46
- [product_id] [int],
47
- [tariff_id] [int],
48
- [tariff_start_date] [date]
49
- CONSTRAINT [product_tariffs_pk] PRIMARY KEY
50
- ( [product_id], [tariff_id], [tariff_start_date] )
51
- );
52
-
53
- CREATE TABLE suburbs (
54
- city_id [int],
55
- suburb_id [int],
56
- name varchar(50) not null,
57
- CONSTRAINT [suburbs_pk] PRIMARY KEY
58
- ( [city_id], [suburb_id] )
59
- );
60
-
61
- CREATE TABLE streets (
62
- id [int] IDENTITY(1000,1) NOT NULL,
63
- city_id [int] NOT NULL,
64
- suburb_id [int] NOT NULL,
65
- name [varchar](50) NOT NULL
66
- );
67
-
68
- CREATE TABLE users (
69
- id [int] IDENTITY(1000,1) NOT NULL,
70
- name varchar(50) NOT NULL
71
- );
72
-
73
- CREATE TABLE articles (
74
- id [int] IDENTITY(1000,1) NOT NULL,
75
- name varchar(50) NOT NULL
76
- );
77
-
78
- CREATE TABLE readings (
79
- id [int] PRIMARY KEY,
80
- user_id [int] NOT NULL,
81
- article_id [int] NOT NULL,
82
- rating [int] NOT NULL
83
- );
84
-
85
- CREATE TABLE groups (
86
- id [int] IDENTITY(1000,1) NOT NULL,
87
- name [varchar](50) NOT NULL
88
- );
89
-
90
- CREATE TABLE memberships (
91
- user_id [int] NOT NULL,
92
- group_id [int] NOT NULL
93
- CONSTRAINT [memberships_pk] PRIMARY KEY
94
- ( [user_id], [group_id] )
95
- );
96
-
97
- CREATE TABLE membership_statuses (
98
- id [int] IDENTITY(1,1) NOT NULL,
99
- user_id [int] not null,
100
- group_id [int] not null,
101
- status varchar(50) not null
102
- );
103
-
104
- CREATE TABLE departments (
105
- department_id [int] NOT NULL,
106
- location_id [int] NOT NULL
107
- CONSTRAINT [departments_pk] PRIMARY KEY
108
- ( [department_id], [location_id] )
109
- );
110
-
111
- CREATE TABLE employees (
112
- id [int] IDENTITY(1000,1) NOT NULL,
113
- department_id [int] NULL,
114
- location_id [int] NULL,
115
- name [varchar](50) NOT NULL
116
- );
117
-
118
- CREATE TABLE comments (
119
- id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
120
- person_id [int] NULL,
121
- shown [int] NULL,
122
- person_type varchar(100) NULL,
123
- hack_id [int] NULL
124
- );
125
-
126
- CREATE TABLE hacks (
127
- id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
128
- name [varchar](50) NOT NULL
129
- );
130
-
131
- CREATE TABLE restaurants (
132
- franchise_id [int] NOT NULL,
133
- store_id [int] NOT NULL,
134
- name [varchar](100),
135
- lock_version [int] DEFAULT 0
136
- CONSTRAINT [restaurants_pk] PRIMARY KEY CLUSTERED
137
- ( [franchise_id], [store_id] )
138
- );
139
-
140
- CREATE TABLE restaurants_suburbs (
141
- franchise_id [int] NOT NULL,
142
- store_id [int] NOT NULL,
143
- city_id [int] NOT NULL,
144
- suburb_id [int] NOT NULL
145
- );
146
-
147
- CREATE TABLE dorms (
148
- id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL
149
- );
150
-
151
- CREATE TABLE rooms (
152
- dorm_id [int] NOT NULL,
153
- room_id [int] NOT NULL,
154
- CONSTRAINT [rooms_pk] PRIMARY KEY CLUSTERED
155
- ( [dorm_id], [room_id] )
156
- );
157
-
158
- CREATE TABLE room_attributes (
159
- id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
160
- name [varchar](50)
161
- );
162
-
163
- CREATE TABLE room_attribute_assignments (
164
- dorm_id [int] NOT NULL,
165
- room_id [int] NOT NULL,
166
- room_attribute_id [int] NOT NULL
167
- );
168
-
169
- CREATE TABLE students (
170
- id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL
171
- );
172
-
173
- CREATE TABLE room_assignments (
174
- student_id [int] NOT NULL,
175
- dorm_id [int] NOT NULL,
176
- room_id [int] NOT NULL
177
- );
178
-
179
- CREATE TABLE seats (
180
- flight_number [int] NOT NULL,
181
- seat [int] NOT NULL,
182
- customer [int]
183
- CONSTRAINT [seats_pk] PRIMARY KEY
184
- ( [flight_number], [seat] )
185
- );
186
-
187
- CREATE TABLE capitols (
188
- country varchar(450) NOT NULL,
189
- city varchar(450) NOT NULL
190
- CONSTRAINT [capitols_pk] PRIMARY KEY
191
- ( [country], [city] )
192
- );
193
-
194
- CREATE TABLE products_restaurants (
195
- product_id [int] NOT NULL,
196
- franchise_id [int] NOT NULL,
197
- store_id [int] NOT NULL
198
- );
199
-
200
- CREATE TABLE employees_groups (
201
- employee_id [int] not null,
202
- group_id [int] not null
203
- );
204
-
205
- CREATE TABLE pk_called_ids (
206
- id [int] IDENTITY(1000,1) NOT NULL,
207
- reference_code [int] not null,
208
- code_label [varchar](50) default null,
209
- abbreviation [varchar](50) default null,
210
- description [varchar](50) default null
211
- CONSTRAINT [pk_called_ids_pk] PRIMARY KEY
212
- ( [id], [reference_code] )
1
+ USE [composite_primary_keys_unittest];
2
+
3
+ CREATE TABLE reference_types (
4
+ reference_type_id [int] IDENTITY(1000,1) NOT NULL,
5
+ type_label [varchar](50) NULL,
6
+ abbreviation [varchar](50) NULL,
7
+ description [varchar](50) NULL
8
+ );
9
+
10
+ CREATE TABLE reference_codes (
11
+ reference_type_id [int],
12
+ reference_code [int],
13
+ code_label [varchar](50) NULL,
14
+ abbreviation [varchar](50) NULL,
15
+ description [varchar](50) NULL
16
+ );
17
+
18
+ CREATE TABLE products (
19
+ id [int] IDENTITY(1000,1) NOT NULL,
20
+ name [varchar](50) NULL
21
+ );
22
+
23
+ CREATE TABLE tariffs (
24
+ [tariff_id] [int],
25
+ [start_date] [date],
26
+ [amount] [int] NULL,
27
+ [created_at] [datetimeoffset](7) NOT NULL,
28
+ [updated_at] [datetimeoffset](7) NOT NULL
29
+ CONSTRAINT [tariffs_pk] PRIMARY KEY
30
+ ( [tariff_id], [start_date] )
31
+ );
32
+
33
+ CREATE TABLE product_tariffs (
34
+ [product_id] [int],
35
+ [tariff_id] [int],
36
+ [tariff_start_date] [date]
37
+ CONSTRAINT [product_tariffs_pk] PRIMARY KEY
38
+ ( [product_id], [tariff_id], [tariff_start_date] )
39
+ );
40
+
41
+ CREATE TABLE suburbs (
42
+ city_id [int],
43
+ suburb_id [int],
44
+ name varchar(50) not null,
45
+ CONSTRAINT [suburbs_pk] PRIMARY KEY
46
+ ( [city_id], [suburb_id] )
47
+ );
48
+
49
+ CREATE TABLE streets (
50
+ id [int] IDENTITY(1000,1) NOT NULL,
51
+ city_id [int] NOT NULL,
52
+ suburb_id [int] NOT NULL,
53
+ name [varchar](50) NOT NULL
54
+ );
55
+
56
+ CREATE TABLE users (
57
+ id [int] IDENTITY(1000,1) NOT NULL,
58
+ name varchar(50) NOT NULL
59
+ );
60
+
61
+ CREATE TABLE articles (
62
+ id [int] IDENTITY(1000,1) NOT NULL,
63
+ name varchar(50) NOT NULL
64
+ );
65
+
66
+ CREATE TABLE readings (
67
+ id [int] PRIMARY KEY,
68
+ user_id [int] NOT NULL,
69
+ article_id [int] NOT NULL,
70
+ rating [int] NOT NULL
71
+ );
72
+
73
+ CREATE TABLE groups (
74
+ id [int] IDENTITY(1000,1) NOT NULL,
75
+ name [varchar](50) NOT NULL
76
+ );
77
+
78
+ CREATE TABLE memberships (
79
+ user_id [int] NOT NULL,
80
+ group_id [int] NOT NULL
81
+ CONSTRAINT [memberships_pk] PRIMARY KEY
82
+ ( [user_id], [group_id] )
83
+ );
84
+
85
+ CREATE TABLE membership_statuses (
86
+ id [int] IDENTITY(1,1) NOT NULL,
87
+ user_id [int] not null,
88
+ group_id [int] not null,
89
+ status varchar(50) not null
90
+ );
91
+
92
+ CREATE TABLE departments (
93
+ id [int] IDENTITY(100,1) NOT NULL,
94
+ location_id [int] NOT NULL
95
+ CONSTRAINT [departments_pk] PRIMARY KEY
96
+ ( [id], [location_id] )
97
+ );
98
+
99
+ CREATE TABLE employees (
100
+ id [int] IDENTITY(1000,1) NOT NULL,
101
+ department_id [int] NULL,
102
+ location_id [int] NULL,
103
+ name [varchar](50) NOT NULL
104
+ );
105
+
106
+ CREATE TABLE comments (
107
+ id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
108
+ article_id [int] NOT NULL,
109
+ person_id [int] NOT NULL,
110
+ person_type varchar(100) NULL
111
+ );
112
+
113
+ CREATE TABLE restaurants (
114
+ franchise_id [int] NOT NULL,
115
+ store_id [int] NOT NULL,
116
+ name [varchar](100),
117
+ lock_version [int] DEFAULT 0
118
+ CONSTRAINT [restaurants_pk] PRIMARY KEY CLUSTERED
119
+ ( [franchise_id], [store_id] )
120
+ );
121
+
122
+ CREATE TABLE restaurants_suburbs (
123
+ franchise_id [int] NOT NULL,
124
+ store_id [int] NOT NULL,
125
+ city_id [int] NOT NULL,
126
+ suburb_id [int] NOT NULL
127
+ );
128
+
129
+ CREATE TABLE dorms (
130
+ id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL
131
+ );
132
+
133
+ CREATE TABLE rooms (
134
+ dorm_id [int] NOT NULL,
135
+ room_id [int] NOT NULL,
136
+ CONSTRAINT [rooms_pk] PRIMARY KEY CLUSTERED
137
+ ( [dorm_id], [room_id] )
138
+ );
139
+
140
+ CREATE TABLE room_attributes (
141
+ id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
142
+ name [varchar](50)
143
+ );
144
+
145
+ CREATE TABLE room_attribute_assignments (
146
+ dorm_id [int] NOT NULL,
147
+ room_id [int] NOT NULL,
148
+ room_attribute_id [int] NOT NULL
149
+ );
150
+
151
+ CREATE TABLE students (
152
+ id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL
153
+ );
154
+
155
+ CREATE TABLE room_assignments (
156
+ student_id [int] NOT NULL,
157
+ dorm_id [int] NOT NULL,
158
+ room_id [int] NOT NULL
159
+ );
160
+
161
+ CREATE TABLE capitols (
162
+ country varchar(450) NOT NULL,
163
+ city varchar(450) NOT NULL
164
+ CONSTRAINT [capitols_pk] PRIMARY KEY
165
+ ( [country], [city] )
166
+ );
167
+
168
+ CREATE TABLE products_restaurants (
169
+ product_id [int] NOT NULL,
170
+ franchise_id [int] NOT NULL,
171
+ store_id [int] NOT NULL
172
+ );
173
+
174
+ CREATE TABLE employees_groups (
175
+ employee_id [int] not null,
176
+ group_id [int] not null
213
177
  );
@@ -1,11 +1,16 @@
1
- class Department < ActiveRecord::Base
2
- self.primary_keys = :department_id, :location_id
3
- has_many :employees,
4
- # We intentionally redefine primary key for test purposes. #455
5
- :primary_key => [:department_id, :location_id],
6
- :foreign_key => [:department_id, :location_id]
7
- has_one :head, :class_name => 'Employee', :autosave => true, :dependent => :delete,
8
- # We intentionally redefine primary key for test purposes. #455
9
- :primary_key => [:department_id, :location_id],
10
- :foreign_key => [:department_id, :location_id]
11
- end
1
+ class Department < ActiveRecord::Base
2
+ self.primary_keys = :id, :location_id
3
+
4
+ has_many :employees,
5
+ # We intentionally redefine primary key for test purposes. #455
6
+ :primary_key => [:id, :location_id],
7
+ :foreign_key => [:department_id, :location_id]
8
+
9
+ has_many :comments, :through => :employees
10
+
11
+ has_one :head, :class_name => 'Employee', :autosave => true, :dependent => :delete,
12
+ # We intentionally redefine primary key for test purposes. #455
13
+ :primary_key => [:id, :location_id],
14
+ :foreign_key => [:department_id, :location_id]
15
+
16
+ end
@@ -1,15 +1,15 @@
1
- accounting:
2
- department_id: 1
3
- location_id: 1
4
-
5
- engineering:
6
- department_id: 2
7
- location_id: 1
8
-
9
- human_resources:
10
- department_id: 3
11
- location_id: 2
12
-
13
- offsite_accounting:
14
- department_id: 1
15
- location_id: 2
1
+ accounting:
2
+ id: 1
3
+ location_id: 1
4
+
5
+ engineering:
6
+ id: 2
7
+ location_id: 1
8
+
9
+ human_resources:
10
+ id: 3
11
+ location_id: 2
12
+
13
+ offsite_accounting:
14
+ id: 1
15
+ location_id: 2
@@ -1,28 +1,28 @@
1
- steve:
2
- id: 1
3
- department_id: 1
4
- location_id: 1
5
- name: Steve
6
-
7
- jill:
8
- id: 2
9
- department_id: 1
10
- location_id: 1
11
- name: Jill
12
-
13
- sarah:
14
- id: 3
15
- department_id: 2
16
- location_id: 1
17
- name: Sarah
18
-
19
- robert:
20
- id: 4
21
- department_id: 2
22
- location_id: 1
23
- name: Robert
24
-
25
- mindy:
26
- department_id: 3
27
- location_id: 2
1
+ steve:
2
+ id: 1
3
+ department_id: 1
4
+ location_id: 1
5
+ name: Steve
6
+
7
+ jill:
8
+ id: 2
9
+ department_id: 1
10
+ location_id: 1
11
+ name: Jill
12
+
13
+ sarah:
14
+ id: 3
15
+ department_id: 2
16
+ location_id: 1
17
+ name: Sarah
18
+
19
+ robert:
20
+ id: 4
21
+ department_id: 2
22
+ location_id: 1
23
+ name: Robert
24
+
25
+ mindy:
26
+ department_id: 3
27
+ location_id: 2
28
28
  name: Mindy
@@ -1,11 +1,11 @@
1
1
  santiago_first:
2
2
  id: 1
3
3
  user_id: 1
4
- article_id: 1
4
+ article: first
5
5
  rating: 4
6
6
 
7
7
  santiago_second:
8
8
  id: 2
9
9
  user_id: 1
10
- article_id: 2
10
+ article: second
11
11
  rating: 5
@@ -1,11 +1,11 @@
1
- a:
2
- franchise_id: 1
3
- store_id: 1
4
- city_id: 1
5
- suburb_id: 1
6
-
7
- b:
8
- franchise_id: 1
9
- store_id: 1
10
- city_id: 2
11
- suburb_id: 1
1
+ a:
2
+ franchise_id: 1
3
+ store_id: 1
4
+ city_id: 1
5
+ suburb_id: 1
6
+
7
+ b:
8
+ franchise_id: 1
9
+ store_id: 1
10
+ city_id: 2
11
+ suburb_id: 2
@@ -1,17 +1,17 @@
1
- first:
2
- id: 1
3
- city_id: 1
4
- suburb_id: 1
5
- name: First Street
6
-
7
- second1:
8
- id: 2
9
- city_id: 2
10
- suburb_id: 1
11
- name: First Street
12
-
13
- second2:
14
- id: 3
15
- city_id: 2
16
- suburb_id: 1
1
+ first:
2
+ id: 1
3
+ city_id: 1
4
+ suburb_id: 1
5
+ name: First Street
6
+
7
+ second1:
8
+ id: 2
9
+ city_id: 2
10
+ suburb_id: 2
11
+ name: First Street
12
+
13
+ second2:
14
+ id: 3
15
+ city_id: 2
16
+ suburb_id: 2
17
17
  name: Second Street
@@ -1,14 +1,14 @@
1
- first:
2
- city_id: 1
3
- suburb_id: 1
4
- name: First Suburb
5
-
6
- second:
7
- city_id: 2
8
- suburb_id: 1
9
- name: Second Suburb
10
-
11
- no_mcdonalds:
12
- city_id: 1
13
- suburb_id: 2
14
- name: Third Suburb
1
+ first:
2
+ city_id: 1
3
+ suburb_id: 1
4
+ name: First Suburb
5
+
6
+ second:
7
+ city_id: 2
8
+ suburb_id: 2
9
+ name: Second Suburb
10
+
11
+ no_mcdonalds:
12
+ city_id: 1
13
+ suburb_id: 3
14
+ name: Third Suburb
@@ -1,10 +1,11 @@
1
- class User < ActiveRecord::Base
2
- has_many :readings
3
- has_many :articles, :through => :readings
4
- has_many :comments, :as => :person
5
- has_many :hacks, :through => :comments, :source => :hack
6
-
7
- def find_custom_articles
8
- articles.where("name = ?", "Article One")
9
- end
10
- end
1
+ class User < ActiveRecord::Base
2
+ has_many :readings
3
+ has_many :articles, :through => :readings
4
+
5
+ has_many :comments, :as => :person
6
+ has_one :first_comment, :as => :person, :class_name => "Comment"
7
+
8
+ def find_custom_articles
9
+ articles.where("name = ?", "Article One")
10
+ end
11
+ end