teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

8

質問内容の修正

2019/03/22 02:19

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -29,7 +29,7 @@
29
29
  Geoモデルにはテーブルはないので ActiveRecord ではなく ActiveModel をオーバーライドするため
30
30
  create でバリデーションを呼ぶことができず
31
31
 
32
- 親モデルの before_save の中でバリデーションするかないのですが
32
+ 親モデルの before_save の中でバリデーションしようと思ったのですが
33
33
  before_save はバリデーションの後によばれるため
34
34
  他のバリデーションの後に個別にチェックする必要があって
35
35
 

7

質問内容の修正

2019/03/22 02:19

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -44,7 +44,7 @@
44
44
  あるいは
45
45
  `validates :geo, geo.validates`
46
46
  のように特定のカラムのバリデーションだけ、
47
- そのカラムの別クラスに委ねるみたいなことはできるんでしょうか
47
+ active record ではないモデルに委ねるみたいなことはできるんでしょうか
48
48
 
49
49
 
50
50
  あと… 保存処理をまだかいていないのですが

6

質問内容の修正

2019/03/22 02:18

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -30,6 +30,8 @@
30
30
  create でバリデーションを呼ぶことができず
31
31
 
32
32
  親モデルの before_save の中でバリデーションするしかないのですが
33
+ before_save はバリデーションの後によばれるため
34
+ 他のバリデーションの後に個別にチェックする必要があって
33
35
 
34
36
  ```
35
37
  if self.geo.invalid?
@@ -37,7 +39,7 @@
37
39
  end
38
40
  ```
39
41
 
40
- みたいにかにはどうすればいいんでしょうか
42
+ みたいにかきたいのですがバリデーションを失敗させるにはどうかけばいいんでしょうか
41
43
 
42
44
  あるいは
43
45
  `validates :geo, geo.validates`

5

質問内容の修正

2019/03/22 02:17

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -26,9 +26,11 @@
26
26
 
27
27
  バリデーションをいつどうやって実行すればいいかがわかりません
28
28
 
29
- Geoモデルにはテーブルはないので create を呼ぶことがきず
29
+ Geoモデルにはテーブルはないので ActiveRecordはなく ActiveModel をオーバーライドするため
30
- 親モデルの before_save の中
30
+ createバリデーションを呼ぶことができず
31
31
 
32
+ 親モデルの before_save の中でバリデーションするしかないのですが
33
+
32
34
  ```
33
35
  if self.geo.invalid?
34
36
  `バリデーション失敗を投げる # この部分の書き方がわからない`

4

質問内容の修正

2019/03/22 02:14

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- カラムを別モデルにしてバリデーションしたい
1
+ バリデーション失敗を強制的に発生させる方法
body CHANGED
@@ -1,6 +1,10 @@
1
- 親モデルの1つのカラムに Rectangle Circle Polygon といったポリモーフィック位置情報を保存したいのですが
2
- どのように実装するのが自然でしょうか
1
+ ### やりたいこと
3
2
 
3
+ 親モデルの1つのカラムに Rectangle Circle Polygon といったポリモーフィック位置情報を
4
+ 入力はタイプに応じた小数入力でデータベースには JSON で保存したい
5
+
6
+ ### ためしたこと
7
+
4
8
  form はJSでタイプを選択すると入力欄が変化するビューを作って
5
9
  Circle の場合は
6
10
  `geo => {type =>'circle', center_lat, center_lng, radius}`
@@ -16,7 +20,10 @@
16
20
  end
17
21
  ```
18
22
 
19
- のような感じでGeoを継承した個別インスタンスを作ることはできたんで
23
+ のような感じでGeoを継承した個別インスタンスを作っていま
24
+
25
+ ### 発生している問題
26
+
20
27
  バリデーションをいつどうやって実行すればいいかがわかりません
21
28
 
22
29
  Geoモデルにはテーブルはないので create を呼ぶことができず
@@ -24,7 +31,7 @@
24
31
 
25
32
  ```
26
33
  if self.geo.invalid?
27
- バリデーション失敗を投げる # この部分の書き方がわからない
34
+ `バリデーション失敗を投げる # この部分の書き方がわからない`
28
35
  end
29
36
  ```
30
37
 

3

質問内容の修正

2019/03/22 02:12

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -35,13 +35,14 @@
35
35
  のように特定のカラムのバリデーションだけ、
36
36
  そのカラムの別クラスに委ねるみたいなことはできるんでしょうか
37
37
 
38
+
38
- 保存処理をまだかいていないのですが
39
+ あと… 保存処理をまだかいていないのですが
39
40
  カラム自体は String で JSON で保存しようと思っています
40
41
  before_save で
41
42
  `self.geo = self.geo.to_json`
42
43
  のようにかけば保存されるときだけモデルからJSON文字列になってくれるんでしょうか
43
- ``
44
44
 
45
+
45
46
  同じカラム名で Rails 上ではモデルで保存するときだけ JSON みたいにするのは
46
47
  どこでどっちの状態になってるか混乱してしまって…
47
48
  普通はこういうことはやらないのでしょうか

2

質問内容の修正

2019/03/20 12:37

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  ```
14
14
  def geo=(val)
15
- @geo = Geo.generate(val)
15
+ @geo = Geo.generate(val) # Circle や Rectangle といったインスタンスができる
16
16
  end
17
17
  ```
18
18
 

1

質問内容の修正

2019/03/20 12:36

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -35,4 +35,14 @@
35
35
  のように特定のカラムのバリデーションだけ、
36
36
  そのカラムの別クラスに委ねるみたいなことはできるんでしょうか
37
37
 
38
+ 保存処理をまだかいていないのですが
39
+ カラム自体は String で JSON で保存しようと思っています
40
+ before_save で
41
+ `self.geo = self.geo.to_json`
42
+ のようにかけば保存されるときだけモデルからJSON文字列になってくれるんでしょうか
43
+ ``
44
+
45
+ 同じカラム名で Rails 上ではモデルで保存するときだけ JSON みたいにするのは
46
+ どこでどっちの状態になってるか混乱してしまって…
47
+ 普通はこういうことはやらないのでしょうか
38
48
  自分でもまだ整理しきれていなくて質問がわかりにくくてすみません