質問編集履歴

1

根本的な質問の変更

2019/07/02 03:12

投稿

shumbow
shumbow

スコア35

test CHANGED
@@ -1 +1 @@
1
- カスタムバリデーションでNo method errorが出
1
+ 仮想的な属性をセットしても、Undefined method が出てしまう
test CHANGED
@@ -1,4 +1,4 @@
1
- 入力フォームで、チェックボックスがチェックされている時のみバリーデーションをしたいのですがせん
1
+ 入力フォームで、チェックボックスがチェックされている時のみバリーデーションをしたくて、attr_accessorで仮想的な属性を設けて対処しようと思ってのですが、エラーが出てしまいま
2
2
 
3
3
 
4
4
 
@@ -7,6 +7,10 @@
7
7
  ```rb
8
8
 
9
9
  #モデル
10
+
11
+ attr_accessor :last_name, :first_name, :option_check
12
+
13
+
10
14
 
11
15
  validates :name, presence: true, length: ...
12
16
 
@@ -20,35 +24,33 @@
20
24
 
21
25
 
22
26
 
27
+ if option_check == '1' ⇦(ここで undefined local variable or method `option_check' for モデル (call 'モデル.connection' to establish a connection):Class が出てしまう)
23
28
 
29
+ validates :option_1, presence: true, length: { maximum: 30 }
24
30
 
25
- validate :option_validate if option_check == '1'
31
+ validates :option_2, presence: true, length: { maximum: 50 }
26
32
 
27
- .
33
+ .
28
34
 
29
- .
35
+ .
30
36
 
31
- .
37
+ .
32
38
 
39
+ end
40
+
33
- private
41
+ before_validation :set_name
34
42
 
35
43
 
36
44
 
37
- def option_validate
45
+ def set_name
38
46
 
39
- validates :option_1, presence: true, lenfth: { maximum: 30 } ⇦ ここでエラーが発生(no method error 'validates')
47
+ self.name = [last_name, first_name].join(' ') ⇦問題なく動作する
40
48
 
41
- validates :option_2, presence: true, lenfth: { maximum: 50 }
42
-
43
- .
49
+ end
44
-
45
- .
46
-
47
- .
48
50
 
49
51
 
50
52
 
51
- end
53
+
52
54
 
53
55
 
54
56
 
@@ -56,4 +58,40 @@
56
58
 
57
59
 
58
60
 
61
+ 上記のようにフォームでは他に、名姓を分けてのちに結合して一つの名前にするためにもatttr_accessorを使っていますが、こちらはlast_nameやfirst_nameで値を取得できていて、option_checkはうまくいかないという状況です。
62
+
63
+ 以下、フォーム入力後の遷移先コントローラーでdebuggerでいろいろチェックしてみた結果です。ここでは値が返ってきます。
64
+
65
+ ```
66
+
67
+ 10:
68
+
69
+ 11:
70
+
59
- ほかのバリデーションはうまくいっています。理由のわかる方教えていただけないでしょうか?
71
+ 13: render 'new' if @model.invalid?
72
+
73
+ 14: debugger
74
+
75
+ => 15: end
76
+
77
+ 16:
78
+
79
+
80
+
81
+ (byebug) @model.option_check
82
+
83
+ "0"
84
+
85
+
86
+
87
+ (byebug) @model.last_name
88
+
89
+ "山田"
90
+
91
+
92
+
93
+
94
+
95
+ ```
96
+
97
+ どなたか原因がわかる方ご教授お願いします