anchormodel 0.3.1 → 0.4.0
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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/CHANGELOG.md +14 -0
- data/EXAMPLES.md +408 -0
- data/Gemfile.lock +1 -1
- data/README.md +43 -1
- data/VERSION +1 -1
- data/anchormodel.gemspec +3 -3
- data/bin/test +9 -0
- data/doc/Anchormodel/ActiveModelTypeValueMulti.html +204 -42
- data/doc/Anchormodel/ActiveModelTypeValueSingle.html +243 -54
- data/doc/Anchormodel/Attribute.html +60 -37
- data/doc/Anchormodel/ModelMixin.html +166 -16
- data/doc/Anchormodel/SimpleFormInputs/Helpers/AnchormodelInputsCommon.html +82 -21
- data/doc/Anchormodel/SimpleFormInputs/Helpers.html +2 -11
- data/doc/Anchormodel/SimpleFormInputs.html +2 -11
- data/doc/Anchormodel/Util.html +497 -38
- data/doc/Anchormodel/Version.html +2 -20
- data/doc/Anchormodel.html +536 -129
- data/doc/AnchormodelCheckBoxesInput.html +22 -1
- data/doc/AnchormodelGenerator.html +64 -13
- data/doc/AnchormodelInput.html +24 -1
- data/doc/AnchormodelRadioButtonsInput.html +22 -1
- data/doc/_index.html +16 -1
- data/doc/class_list.html +1 -1
- data/doc/file.README.html +40 -2
- data/doc/index.html +40 -2
- data/doc/method_list.html +57 -17
- data/doc/top-level-namespace.html +1 -1
- data/lib/anchormodel/active_model_type_value_multi.rb +31 -5
- data/lib/anchormodel/active_model_type_value_single.rb +34 -6
- data/lib/anchormodel/attribute.rb +20 -8
- data/lib/anchormodel/model_mixin.rb +43 -8
- data/lib/anchormodel/simple_form_inputs/anchormodel_check_boxes_input.rb +7 -0
- data/lib/anchormodel/simple_form_inputs/anchormodel_input.rb +9 -0
- data/lib/anchormodel/simple_form_inputs/anchormodel_radio_buttons_input.rb +7 -0
- data/lib/anchormodel/simple_form_inputs/helpers/anchormodel_inputs_common.rb +14 -0
- data/lib/anchormodel/util.rb +102 -17
- data/lib/anchormodel.rb +109 -15
- data/lib/generators/anchormodel/anchormodel_generator.rb +8 -0
- data/test/active_record_model/user_test.rb +221 -10
- data/test/dummy/app/anchormodels/animal.rb +1 -0
- metadata +3 -1
|
@@ -102,7 +102,9 @@
|
|
|
102
102
|
<h2>Overview</h2><div class="docstring">
|
|
103
103
|
<div class="discussion">
|
|
104
104
|
|
|
105
|
-
<p>
|
|
105
|
+
<p>Metadata about an anchormodel attribute installed on a Rails model.</p>
|
|
106
|
+
|
|
107
|
+
<p>One instance is created per call to ModelMixin#belongs_to_anchormodel or ModelMixin#belongs_to_anchormodels and stored in the model class’s <code>anchormodel_attributes</code> hash. Used internally by the AR type casters and by SimpleForm inputs to discover what an attribute points to.</p>
|
|
106
108
|
|
|
107
109
|
|
|
108
110
|
</div>
|
|
@@ -139,7 +141,9 @@
|
|
|
139
141
|
|
|
140
142
|
|
|
141
143
|
|
|
142
|
-
<span class="summary_desc"><div class='inline'
|
|
144
|
+
<span class="summary_desc"><div class='inline'>
|
|
145
|
+
<p>Returns the value of attribute anchormodel_class.</p>
|
|
146
|
+
</div></span>
|
|
143
147
|
|
|
144
148
|
</li>
|
|
145
149
|
|
|
@@ -166,7 +170,9 @@
|
|
|
166
170
|
|
|
167
171
|
|
|
168
172
|
|
|
169
|
-
<span class="summary_desc"><div class='inline'
|
|
173
|
+
<span class="summary_desc"><div class='inline'>
|
|
174
|
+
<p>Returns the value of attribute attribute_name.</p>
|
|
175
|
+
</div></span>
|
|
170
176
|
|
|
171
177
|
</li>
|
|
172
178
|
|
|
@@ -193,7 +199,9 @@
|
|
|
193
199
|
|
|
194
200
|
|
|
195
201
|
|
|
196
|
-
<span class="summary_desc"><div class='inline'
|
|
202
|
+
<span class="summary_desc"><div class='inline'>
|
|
203
|
+
<p>Returns the value of attribute optional.</p>
|
|
204
|
+
</div></span>
|
|
197
205
|
|
|
198
206
|
</li>
|
|
199
207
|
|
|
@@ -254,7 +262,9 @@
|
|
|
254
262
|
|
|
255
263
|
|
|
256
264
|
|
|
257
|
-
<span class="summary_desc"><div class='inline'
|
|
265
|
+
<span class="summary_desc"><div class='inline'>
|
|
266
|
+
<p>True for <code>belongs_to_anchormodels</code> (collection), false for <code>belongs_to_anchormodel</code> (single).</p>
|
|
267
|
+
</div></span>
|
|
258
268
|
|
|
259
269
|
</li>
|
|
260
270
|
|
|
@@ -291,13 +301,13 @@
|
|
|
291
301
|
<span class='name'>model_class</span>
|
|
292
302
|
|
|
293
303
|
|
|
294
|
-
<span class='type'>(<tt>
|
|
304
|
+
<span class='type'>(<tt>Class</tt>)</span>
|
|
295
305
|
|
|
296
306
|
|
|
297
307
|
|
|
298
308
|
—
|
|
299
309
|
<div class='inline'>
|
|
300
|
-
<p>The
|
|
310
|
+
<p>The ActiveRecord model class on which ModelMixin#belongs_to_anchormodel is called.</p>
|
|
301
311
|
</div>
|
|
302
312
|
|
|
303
313
|
</li>
|
|
@@ -313,7 +323,7 @@
|
|
|
313
323
|
|
|
314
324
|
—
|
|
315
325
|
<div class='inline'>
|
|
316
|
-
<p>The
|
|
326
|
+
<p>The model attribute / DB column name.</p>
|
|
317
327
|
</div>
|
|
318
328
|
|
|
319
329
|
</li>
|
|
@@ -323,7 +333,7 @@
|
|
|
323
333
|
<span class='name'>anchormodel_class</span>
|
|
324
334
|
|
|
325
335
|
|
|
326
|
-
<span class='type'>(<tt>Class</tt>)</span>
|
|
336
|
+
<span class='type'>(<tt>Class</tt>, <tt>nil</tt>)</span>
|
|
327
337
|
|
|
328
338
|
|
|
329
339
|
<em class="default">(defaults to: <tt>nil</tt>)</em>
|
|
@@ -331,7 +341,7 @@
|
|
|
331
341
|
|
|
332
342
|
—
|
|
333
343
|
<div class='inline'>
|
|
334
|
-
<p>
|
|
344
|
+
<p>The Anchormodel subclass. Omit if attribute <code>:foo_bar</code> references <code>FooBar</code>.</p>
|
|
335
345
|
</div>
|
|
336
346
|
|
|
337
347
|
</li>
|
|
@@ -349,7 +359,7 @@
|
|
|
349
359
|
|
|
350
360
|
—
|
|
351
361
|
<div class='inline'>
|
|
352
|
-
<p>If true,
|
|
362
|
+
<p>If true, no presence validation is added.</p>
|
|
353
363
|
</div>
|
|
354
364
|
|
|
355
365
|
</li>
|
|
@@ -367,7 +377,7 @@
|
|
|
367
377
|
|
|
368
378
|
—
|
|
369
379
|
<div class='inline'>
|
|
370
|
-
<p>If true, this attribute holds
|
|
380
|
+
<p>If true, this attribute holds a Set of anchormodels (CSV in column).</p>
|
|
371
381
|
</div>
|
|
372
382
|
|
|
373
383
|
</li>
|
|
@@ -381,16 +391,16 @@
|
|
|
381
391
|
<pre class="lines">
|
|
382
392
|
|
|
383
393
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
394
|
+
25
|
|
395
|
+
26
|
|
396
|
+
27
|
|
397
|
+
28
|
|
398
|
+
29
|
|
399
|
+
30
|
|
400
|
+
31</pre>
|
|
391
401
|
</td>
|
|
392
402
|
<td>
|
|
393
|
-
<pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line
|
|
403
|
+
<pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 25</span>
|
|
394
404
|
|
|
395
405
|
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_model_class'>model_class</span><span class='comma'>,</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='comma'>,</span> <span class='id identifier rubyid_anchormodel_class'>anchormodel_class</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_optional'>optional</span> <span class='op'>=</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='id identifier rubyid_multiple'>multiple</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span>
|
|
396
406
|
<span class='ivar'>@model_class</span> <span class='op'>=</span> <span class='id identifier rubyid_model_class'>model_class</span>
|
|
@@ -423,6 +433,8 @@
|
|
|
423
433
|
</h3><div class="docstring">
|
|
424
434
|
<div class="discussion">
|
|
425
435
|
|
|
436
|
+
<p>Returns the value of attribute anchormodel_class.</p>
|
|
437
|
+
|
|
426
438
|
|
|
427
439
|
</div>
|
|
428
440
|
</div>
|
|
@@ -435,12 +447,12 @@
|
|
|
435
447
|
<pre class="lines">
|
|
436
448
|
|
|
437
449
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
450
|
+
14
|
|
451
|
+
15
|
|
452
|
+
16</pre>
|
|
441
453
|
</td>
|
|
442
454
|
<td>
|
|
443
|
-
<pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line
|
|
455
|
+
<pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 14</span>
|
|
444
456
|
|
|
445
457
|
<span class='kw'>def</span> <span class='id identifier rubyid_anchormodel_class'>anchormodel_class</span>
|
|
446
458
|
<span class='ivar'>@anchormodel_class</span>
|
|
@@ -464,6 +476,8 @@
|
|
|
464
476
|
</h3><div class="docstring">
|
|
465
477
|
<div class="discussion">
|
|
466
478
|
|
|
479
|
+
<p>Returns the value of attribute attribute_name.</p>
|
|
480
|
+
|
|
467
481
|
|
|
468
482
|
</div>
|
|
469
483
|
</div>
|
|
@@ -476,12 +490,12 @@
|
|
|
476
490
|
<pre class="lines">
|
|
477
491
|
|
|
478
492
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
493
|
+
10
|
|
494
|
+
11
|
|
495
|
+
12</pre>
|
|
482
496
|
</td>
|
|
483
497
|
<td>
|
|
484
|
-
<pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line
|
|
498
|
+
<pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 10</span>
|
|
485
499
|
|
|
486
500
|
<span class='kw'>def</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span>
|
|
487
501
|
<span class='ivar'>@attribute_name</span>
|
|
@@ -505,6 +519,8 @@
|
|
|
505
519
|
</h3><div class="docstring">
|
|
506
520
|
<div class="discussion">
|
|
507
521
|
|
|
522
|
+
<p>Returns the value of attribute optional.</p>
|
|
523
|
+
|
|
508
524
|
|
|
509
525
|
</div>
|
|
510
526
|
</div>
|
|
@@ -517,12 +533,12 @@
|
|
|
517
533
|
<pre class="lines">
|
|
518
534
|
|
|
519
535
|
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
536
|
+
18
|
|
537
|
+
19
|
|
538
|
+
20</pre>
|
|
523
539
|
</td>
|
|
524
540
|
<td>
|
|
525
|
-
<pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line
|
|
541
|
+
<pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 18</span>
|
|
526
542
|
|
|
527
543
|
<span class='kw'>def</span> <span class='id identifier rubyid_optional'>optional</span>
|
|
528
544
|
<span class='ivar'>@optional</span>
|
|
@@ -551,6 +567,8 @@
|
|
|
551
567
|
</h3><div class="docstring">
|
|
552
568
|
<div class="discussion">
|
|
553
569
|
|
|
570
|
+
<p>Returns true for <code>belongs_to_anchormodels</code> (collection), false for <code>belongs_to_anchormodel</code> (single).</p>
|
|
571
|
+
|
|
554
572
|
|
|
555
573
|
</div>
|
|
556
574
|
</div>
|
|
@@ -566,6 +584,11 @@
|
|
|
566
584
|
|
|
567
585
|
|
|
568
586
|
|
|
587
|
+
—
|
|
588
|
+
<div class='inline'>
|
|
589
|
+
<p>true for <code>belongs_to_anchormodels</code> (collection), false for <code>belongs_to_anchormodel</code> (single).</p>
|
|
590
|
+
</div>
|
|
591
|
+
|
|
569
592
|
</li>
|
|
570
593
|
|
|
571
594
|
</ul>
|
|
@@ -576,12 +599,12 @@
|
|
|
576
599
|
<pre class="lines">
|
|
577
600
|
|
|
578
601
|
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
602
|
+
34
|
|
603
|
+
35
|
|
604
|
+
36</pre>
|
|
582
605
|
</td>
|
|
583
606
|
<td>
|
|
584
|
-
<pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line
|
|
607
|
+
<pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 34</span>
|
|
585
608
|
|
|
586
609
|
<span class='kw'>def</span> <span class='id identifier rubyid_multiple?'>multiple?</span>
|
|
587
610
|
<span class='ivar'>@multiple</span>
|
|
@@ -596,7 +619,7 @@
|
|
|
596
619
|
</div>
|
|
597
620
|
|
|
598
621
|
<div id="footer">
|
|
599
|
-
Generated on Wed May 13
|
|
622
|
+
Generated on Wed May 13 15:48:24 2026 by
|
|
600
623
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
601
624
|
0.9.28 (ruby-3.3.5).
|
|
602
625
|
</div>
|
|
@@ -91,18 +91,66 @@
|
|
|
91
91
|
<h2>Overview</h2><div class="docstring">
|
|
92
92
|
<div class="discussion">
|
|
93
93
|
|
|
94
|
-
<p>
|
|
94
|
+
<p>Include this mixin in every Rails model that uses anchormodel attributes. The common pattern is to include it once in <code>application_record.rb</code> so all descendant models pick it up automatically.</p>
|
|
95
|
+
|
|
96
|
+
<p>Adds two class-level macros: - ClassMethods#belongs_to_anchormodel for single-value attributes - ClassMethods#belongs_to_anchormodels for collection-valued attributes</p>
|
|
95
97
|
|
|
96
98
|
|
|
97
99
|
</div>
|
|
98
100
|
</div>
|
|
99
101
|
<div class="tags">
|
|
100
102
|
|
|
103
|
+
<div class="examples">
|
|
104
|
+
<p class="tag_title">Examples:</p>
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
<p class="example_title"><div class='inline'>
|
|
108
|
+
<p>Install in ApplicationRecord</p>
|
|
109
|
+
</div></p>
|
|
110
|
+
|
|
111
|
+
<pre class="example code"><code><span class='kw'>class</span> <span class='const'>ApplicationRecord</span> <span class='op'><</span> <span class='const'>ActiveRecord</span><span class='op'>::</span><span class='const'>Base</span>
|
|
112
|
+
<span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="../Anchormodel.html" title="Anchormodel (class)">Anchormodel</a></span></span><span class='op'>::</span><span class='const'>ModelMixin</span>
|
|
113
|
+
<span class='kw'>end</span></code></pre>
|
|
114
|
+
|
|
115
|
+
</div>
|
|
116
|
+
|
|
101
117
|
|
|
102
118
|
</div>
|
|
103
119
|
|
|
104
120
|
|
|
105
121
|
|
|
122
|
+
<h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
|
|
123
|
+
<ul class="summary">
|
|
124
|
+
|
|
125
|
+
<li class="public ">
|
|
126
|
+
<span class="summary_signature">
|
|
127
|
+
|
|
128
|
+
<a href="#anchormodel_attributes-instance_method" title="#anchormodel_attributes (instance method)">#<strong>anchormodel_attributes</strong> ⇒ Hash{Symbol => Anchormodel::Attribute} </a>
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
</span>
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
<span class="summary_desc"><div class='inline'>
|
|
146
|
+
<p>All anchormodel attributes declared on this model class, keyed by attribute name.</p>
|
|
147
|
+
</div></span>
|
|
148
|
+
|
|
149
|
+
</li>
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
</ul>
|
|
153
|
+
|
|
106
154
|
|
|
107
155
|
|
|
108
156
|
|
|
@@ -132,7 +180,7 @@
|
|
|
132
180
|
|
|
133
181
|
|
|
134
182
|
<span class="summary_desc"><div class='inline'>
|
|
135
|
-
<p>
|
|
183
|
+
<p>Declares a single-value anchormodel attribute.</p>
|
|
136
184
|
</div></span>
|
|
137
185
|
|
|
138
186
|
</li>
|
|
@@ -156,7 +204,7 @@
|
|
|
156
204
|
|
|
157
205
|
|
|
158
206
|
<span class="summary_desc"><div class='inline'>
|
|
159
|
-
<p>
|
|
207
|
+
<p>Declares a collection-valued anchormodel attribute.</p>
|
|
160
208
|
</div></span>
|
|
161
209
|
|
|
162
210
|
</li>
|
|
@@ -167,6 +215,68 @@
|
|
|
167
215
|
|
|
168
216
|
|
|
169
217
|
|
|
218
|
+
<div id="instance_attr_details" class="attr_details">
|
|
219
|
+
<h2>Instance Attribute Details</h2>
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
<span id="anchormodel_attributes=-instance_method"></span>
|
|
223
|
+
<div class="method_details first">
|
|
224
|
+
<h3 class="signature first" id="anchormodel_attributes-instance_method">
|
|
225
|
+
|
|
226
|
+
#<strong>anchormodel_attributes</strong> ⇒ <tt>Hash{Symbol => <span class='object_link'><a href="Attribute.html" title="Anchormodel::Attribute (class)">Anchormodel::Attribute</a></span>}</tt>
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
</h3><div class="docstring">
|
|
233
|
+
<div class="discussion">
|
|
234
|
+
|
|
235
|
+
<p>Returns All anchormodel attributes declared on this model class, keyed by attribute name.</p>
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
<div class="tags">
|
|
241
|
+
|
|
242
|
+
<p class="tag_title">Returns:</p>
|
|
243
|
+
<ul class="return">
|
|
244
|
+
|
|
245
|
+
<li>
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
<span class='type'>(<tt>Hash{Symbol => <span class='object_link'><a href="Attribute.html" title="Anchormodel::Attribute (class)">Anchormodel::Attribute</a></span>}</tt>)</span>
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
—
|
|
253
|
+
<div class='inline'>
|
|
254
|
+
<p>All anchormodel attributes declared on this model class, keyed by attribute name.</p>
|
|
255
|
+
</div>
|
|
256
|
+
|
|
257
|
+
</li>
|
|
258
|
+
|
|
259
|
+
</ul>
|
|
260
|
+
|
|
261
|
+
</div><table class="source_code">
|
|
262
|
+
<tr>
|
|
263
|
+
<td>
|
|
264
|
+
<pre class="lines">
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
20</pre>
|
|
268
|
+
</td>
|
|
269
|
+
<td>
|
|
270
|
+
<pre class="code"><span class="info file"># File 'lib/anchormodel/model_mixin.rb', line 20</span>
|
|
271
|
+
|
|
272
|
+
<span class='id identifier rubyid_class_attribute'>class_attribute</span> <span class='symbol'>:anchormodel_attributes</span><span class='comma'>,</span> <span class='label'>default:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre>
|
|
273
|
+
</td>
|
|
274
|
+
</tr>
|
|
275
|
+
</table>
|
|
276
|
+
</div>
|
|
277
|
+
|
|
278
|
+
</div>
|
|
279
|
+
|
|
170
280
|
|
|
171
281
|
<div id="class_method_details" class="method_details_list">
|
|
172
282
|
<h2>Class Method Details</h2>
|
|
@@ -184,18 +294,36 @@
|
|
|
184
294
|
</h3><div class="docstring">
|
|
185
295
|
<div class="discussion">
|
|
186
296
|
|
|
187
|
-
<p>
|
|
297
|
+
<p>Declares a single-value anchormodel attribute.</p>
|
|
298
|
+
|
|
299
|
+
<p>The DB table must have a String column with the same name as <code>attribute_name</code>.</p>
|
|
188
300
|
|
|
189
301
|
|
|
190
302
|
</div>
|
|
191
303
|
</div>
|
|
192
304
|
<div class="tags">
|
|
193
305
|
|
|
306
|
+
<div class="examples">
|
|
307
|
+
<p class="tag_title">Examples:</p>
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
<p class="example_title"><div class='inline'>
|
|
311
|
+
<p>Basic usage</p>
|
|
312
|
+
</div></p>
|
|
313
|
+
|
|
314
|
+
<pre class="example code"><code><span class='kw'>class</span> <span class='const'>User</span> <span class='op'><</span> <span class='const'>ApplicationRecord</span>
|
|
315
|
+
<span class='id identifier rubyid_belongs_to_anchormodel'>belongs_to_anchormodel</span> <span class='symbol'>:role</span> <span class='comment'># `Role` inferred from attribute name
|
|
316
|
+
</span> <span class='id identifier rubyid_belongs_to_anchormodel'>belongs_to_anchormodel</span> <span class='symbol'>:role</span><span class='comma'>,</span> <span class='label'>optional:</span> <span class='kw'>true</span>
|
|
317
|
+
<span class='id identifier rubyid_belongs_to_anchormodel'>belongs_to_anchormodel</span> <span class='symbol'>:favorite_color</span><span class='comma'>,</span> <span class='const'>Color</span> <span class='comment'># explicit anchormodel class
|
|
318
|
+
</span><span class='kw'>end</span></code></pre>
|
|
319
|
+
|
|
320
|
+
</div>
|
|
321
|
+
|
|
194
322
|
|
|
195
323
|
<p class="tag_title">See Also:</p>
|
|
196
324
|
<ul class="see">
|
|
197
325
|
|
|
198
|
-
<li>
|
|
326
|
+
<li><span class='object_link'><a href="Util.html#install_methods_in_model-class_method" title="Anchormodel::Util.install_methods_in_model (method)">Full parameter documentation.</a></span></li>
|
|
199
327
|
|
|
200
328
|
</ul>
|
|
201
329
|
|
|
@@ -205,12 +333,12 @@
|
|
|
205
333
|
<pre class="lines">
|
|
206
334
|
|
|
207
335
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
336
|
+
34
|
|
337
|
+
35
|
|
338
|
+
36</pre>
|
|
211
339
|
</td>
|
|
212
340
|
<td>
|
|
213
|
-
<pre class="code"><span class="info file"># File 'lib/anchormodel/model_mixin.rb', line
|
|
341
|
+
<pre class="code"><span class="info file"># File 'lib/anchormodel/model_mixin.rb', line 34</span>
|
|
214
342
|
|
|
215
343
|
<span class='kw'>def</span> <span class='id identifier rubyid_belongs_to_anchormodel'>belongs_to_anchormodel</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_kwargs'>kwargs</span><span class='rparen'>)</span>
|
|
216
344
|
<span class='const'><span class='object_link'><a href="../Anchormodel.html" title="Anchormodel (class)">Anchormodel</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Util.html" title="Anchormodel::Util (module)">Util</a></span></span><span class='period'>.</span><span class='id identifier rubyid_install_methods_in_model'><span class='object_link'><a href="Util.html#install_methods_in_model-class_method" title="Anchormodel::Util.install_methods_in_model (method)">install_methods_in_model</a></span></span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_kwargs'>kwargs</span><span class='rparen'>)</span>
|
|
@@ -232,18 +360,40 @@
|
|
|
232
360
|
</h3><div class="docstring">
|
|
233
361
|
<div class="discussion">
|
|
234
362
|
|
|
235
|
-
<p>
|
|
363
|
+
<p>Declares a collection-valued anchormodel attribute.</p>
|
|
364
|
+
|
|
365
|
+
<p>The DB table must have a String column with the same name as <code>attribute_name</code>. Multiple keys are stored as a comma-separated string. Reading the attribute returns a <code>Set</code> of Anchormodel instances. <code>optional: true</code> is forced (an empty collection is a valid value).</p>
|
|
236
366
|
|
|
237
367
|
|
|
238
368
|
</div>
|
|
239
369
|
</div>
|
|
240
370
|
<div class="tags">
|
|
241
371
|
|
|
372
|
+
<div class="examples">
|
|
373
|
+
<p class="tag_title">Examples:</p>
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
<p class="example_title"><div class='inline'>
|
|
377
|
+
<p>Basic usage</p>
|
|
378
|
+
</div></p>
|
|
379
|
+
|
|
380
|
+
<pre class="example code"><code><span class='kw'>class</span> <span class='const'>User</span> <span class='op'><</span> <span class='const'>ApplicationRecord</span>
|
|
381
|
+
<span class='id identifier rubyid_belongs_to_anchormodels'>belongs_to_anchormodels</span> <span class='symbol'>:animals</span>
|
|
382
|
+
<span class='kw'>end</span>
|
|
383
|
+
|
|
384
|
+
<span class='id identifier rubyid_user'>user</span> <span class='op'>=</span> <span class='const'>User</span><span class='period'>.</span><span class='id identifier rubyid_create!'>create!</span><span class='lparen'>(</span><span class='label'>animals:</span> <span class='qsymbols_beg'>%i[</span><span class='tstring_content'>cat</span><span class='words_sep'> </span><span class='tstring_content'>dog</span><span class='tstring_end'>]</span></span><span class='rparen'>)</span>
|
|
385
|
+
<span class='id identifier rubyid_user'>user</span><span class='period'>.</span><span class='id identifier rubyid_animals'>animals</span> <span class='comment'># => #<Set: {#<Animal<cat>>, #<Animal<dog>>}>
|
|
386
|
+
</span><span class='id identifier rubyid_user'>user</span><span class='period'>.</span><span class='id identifier rubyid_cat?'>cat?</span> <span class='comment'># => true
|
|
387
|
+
</span><span class='id identifier rubyid_user'>user</span><span class='period'>.</span><span class='id identifier rubyid_animals'>animals</span> <span class='op'><<</span> <span class='symbol'>:horse</span>
|
|
388
|
+
<span class='const'>User</span><span class='period'>.</span><span class='id identifier rubyid_with_any_animals'>with_any_animals</span><span class='lparen'>(</span><span class='symbol'>:cat</span><span class='comma'>,</span> <span class='symbol'>:horse</span><span class='rparen'>)</span> <span class='comment'># => relation matching the user above</span></code></pre>
|
|
389
|
+
|
|
390
|
+
</div>
|
|
391
|
+
|
|
242
392
|
|
|
243
393
|
<p class="tag_title">See Also:</p>
|
|
244
394
|
<ul class="see">
|
|
245
395
|
|
|
246
|
-
<li>
|
|
396
|
+
<li><span class='object_link'><a href="Util.html#install_methods_in_model-class_method" title="Anchormodel::Util.install_methods_in_model (method)">Full parameter documentation.</a></span></li>
|
|
247
397
|
|
|
248
398
|
</ul>
|
|
249
399
|
|
|
@@ -253,12 +403,12 @@
|
|
|
253
403
|
<pre class="lines">
|
|
254
404
|
|
|
255
405
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
406
|
+
56
|
|
407
|
+
57
|
|
408
|
+
58</pre>
|
|
259
409
|
</td>
|
|
260
410
|
<td>
|
|
261
|
-
<pre class="code"><span class="info file"># File 'lib/anchormodel/model_mixin.rb', line
|
|
411
|
+
<pre class="code"><span class="info file"># File 'lib/anchormodel/model_mixin.rb', line 56</span>
|
|
262
412
|
|
|
263
413
|
<span class='kw'>def</span> <span class='id identifier rubyid_belongs_to_anchormodels'>belongs_to_anchormodels</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_kwargs'>kwargs</span><span class='rparen'>)</span>
|
|
264
414
|
<span class='const'><span class='object_link'><a href="../Anchormodel.html" title="Anchormodel (class)">Anchormodel</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Util.html" title="Anchormodel::Util (module)">Util</a></span></span><span class='period'>.</span><span class='id identifier rubyid_install_methods_in_model'><span class='object_link'><a href="Util.html#install_methods_in_model-class_method" title="Anchormodel::Util.install_methods_in_model (method)">install_methods_in_model</a></span></span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_kwargs'>kwargs</span><span class='comma'>,</span> <span class='label'>multiple:</span> <span class='kw'>true</span><span class='rparen'>)</span>
|
|
@@ -273,7 +423,7 @@
|
|
|
273
423
|
</div>
|
|
274
424
|
|
|
275
425
|
<div id="footer">
|
|
276
|
-
Generated on Wed May 13
|
|
426
|
+
Generated on Wed May 13 15:48:24 2026 by
|
|
277
427
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
278
428
|
0.9.28 (ruby-3.3.5).
|
|
279
429
|
</div>
|