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

回答編集履歴

6

teisei

2017/03/08 10:34

投稿

moke
moke

スコア2241

answer CHANGED
File without changes

5

teisei

2017/03/08 10:34

投稿

moke
moke

スコア2241

answer CHANGED
@@ -12,7 +12,7 @@
12
12
  社員 modelで
13
13
  ```ruby
14
14
  after_save :set_bumon_name
15
- has_many :departments
15
+ belongs_to :department
16
16
  def set_bumon_name
17
17
  self.dep_name=self.department.dep_name
18
18
  end

4

じゃ

2017/03/08 10:34

投稿

moke
moke

スコア2241

answer CHANGED
@@ -2,7 +2,7 @@
2
2
  結論から言いますと、する必要が全くないということです。
3
3
  主な理由としては
4
4
  0. クライアントとサーバーの通信量と回数は少なければ少ないほどいい
5
- 1. サーバー側が部門IDと部門名の紐付けを理解しているので、必要な時に結合すればいい
5
+ 1. サーバー側が部門IDと部門名の紐付けを理解しているので、必要な時に結合すればいい(そもそもそれがRelationalDataBaseという概念)
6
6
  2. RelationalDataBaseはできれば正規化(同じ情報を被って保存しない)することが望ましい
7
7
 
8
8
  つまり社員モデルが部門名を持っているということが設計上の間違いなのです。

3

2017/03/08 10:32

投稿

moke
moke

スコア2241

answer CHANGED
@@ -14,7 +14,7 @@
14
14
  after_save :set_bumon_name
15
15
  has_many :departments
16
16
  def set_bumon_name
17
- self.department_name=self.department.name
17
+ self.dep_name=self.department.dep_name
18
18
  end
19
19
  ```
20
20
  というふうにして、くれぐれも部門名を送る
@@ -24,5 +24,5 @@
24
24
 
25
25
  Department.all.map { |p| [p.dep_name, p.id] }
26
26
  ですが
27
- Department.pluck(:name,:id)
27
+ Department.pluck(:dep_name,:id)
28
28
  にすると見た目にも実行速度的にもサイコーです。

2

s

2017/03/08 10:27

投稿

moke
moke

スコア2241

answer CHANGED
@@ -12,10 +12,17 @@
12
12
  社員 modelで
13
13
  ```ruby
14
14
  after_save :set_bumon_name
15
- has_many :部門
15
+ has_many :departments
16
16
  def set_bumon_name
17
- self.部門名=self.部門.name
17
+ self.department_name=self.department.name
18
18
  end
19
19
  ```
20
20
  というふうにして、くれぐれも部門名を送る
21
- ということは考えないでください。
21
+ ということは考えないでください。
22
+
23
+
24
+
25
+ Department.all.map { |p| [p.dep_name, p.id] }
26
+ ですが
27
+ Department.pluck(:name,:id)
28
+ にすると見た目にも実行速度的にもサイコーです。

1

初心者向け注記

2017/03/08 10:24

投稿

moke
moke

スコア2241

answer CHANGED
@@ -5,6 +5,8 @@
5
5
  1. サーバー側が部門IDと部門名の紐付けを理解しているので、必要な時に結合すればいい
6
6
  2. RelationalDataBaseはできれば正規化(同じ情報を被って保存しない)することが望ましい
7
7
 
8
+ つまり社員モデルが部門名を持っているということが設計上の間違いなのです。
9
+
8
10
  それでもどうしてもしたい、あえて正規化を崩したい
9
11
  (検索時の負荷とかの正当な理由で)というときは
10
12
  社員 modelで