回答編集履歴

1

文法が間違っていました。

2015/05/26 07:19

投稿

ymdu
ymdu

スコア60

test CHANGED
@@ -8,7 +8,9 @@
8
8
 
9
9
  class Person
10
10
 
11
- include ActiveModel::Model
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
- super
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
- private
49
+ return @attributes if @attributes
32
50
 
51
+ @attributes = {
33
52
 
53
+ id: id,
34
54
 
35
- def init_omg
55
+ name: name
36
56
 
37
- self.omg = false
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')でも、いろんなときにコールバックが走ります。なので、結構扱いに注意しないと危険なコールバックですね。