回答編集履歴
1
文法が間違っていました。
test
CHANGED
@@ -8,7 +8,9 @@
|
|
8
8
|
|
9
9
|
class Person
|
10
10
|
|
11
|
-
|
11
|
+
extend ActiveModel::Callbacks
|
12
|
+
|
13
|
+
define_model_callbacks :initialize, :only => :after
|
12
14
|
|
13
15
|
attr_accessor :id, :name, :omg
|
14
16
|
|
@@ -20,32 +22,44 @@
|
|
20
22
|
|
21
23
|
def initialize(attributes={})
|
22
24
|
|
25
|
+
attributes.each do |key, value|
|
26
|
+
|
27
|
+
send("#{key}=", value)
|
28
|
+
|
23
|
-
|
29
|
+
end
|
30
|
+
|
31
|
+
|
24
32
|
|
25
33
|
@omg ||= true
|
26
34
|
|
35
|
+
|
36
|
+
|
37
|
+
run_callbacks :initialize do
|
38
|
+
|
39
|
+
self.omg = false
|
40
|
+
|
41
|
+
end
|
42
|
+
|
27
43
|
end
|
28
44
|
|
45
|
+
|
29
46
|
|
47
|
+
def attritbutes
|
30
48
|
|
31
|
-
|
49
|
+
return @attributes if @attributes
|
32
50
|
|
51
|
+
@attributes = {
|
33
52
|
|
53
|
+
id: id,
|
34
54
|
|
35
|
-
|
55
|
+
name: name
|
36
56
|
|
37
|
-
|
57
|
+
}
|
38
58
|
|
39
59
|
end
|
40
60
|
|
41
61
|
end
|
42
62
|
|
43
|
-
|
44
|
-
|
45
|
-
person = Person.new(id: 1, name: 'bob')
|
46
|
-
|
47
|
-
person.omg # => false
|
48
|
-
|
49
63
|
```
|
50
64
|
|
51
65
|
after_initialize というコールバックはインスタンスが生成されたときに発火するので、Person.newでもPerson.where(name: 'bob')でも、いろんなときにコールバックが走ります。なので、結構扱いに注意しないと危険なコールバックですね。
|