createメソッドでDBに保存されなかった

#WHY
createメソッドが行われているものの、DBをみてみると情報が保存されておらず、教えてもらったことを深く刻み込むため、アウトプットしていきます。

-----

##今回の問題
今回はフォームオブジェクトを作成し、２つのテーブルにデータを保存しようというもの
それではコードをみてみます。

```ruby
def create
    @management_address = ManagementAddress.new(management_params)
    if @management_address.valid?
      @management_address.save
      redirect_to root_path
    else
      render :index
    end
end
```
保存処理を行うコントローラーでバリデーションをうまくクリアできたとき、
<b>saveメソッドを行い</b>、root_pathへリダイレクトするというもの。

そしてフォームオブジェクトがこちら

```ruby
include ActiveModel::Model
  attr_accessor :add_num,:area_id,:city,:add_line,:add_build,
                :tel_num,:item_id,:user_id,:management_id
#省略
def save
    management = Management.create(user_id: user_id, item_id: item_id)
    Address.create(add_num: add_num, area_id: area_id, city: city,
                   add_line: add_line, add_build: add_build,
                   tel_num: tel_num, management_id: management.id)
end
```

attr_accessorと、saveメソッドです。
コントローラーのsaveメソッドを行なった場合このように二つのテーブルにcreateします。

そして今回起きたのが
<b>「フォームから情報を入力し送信すると無事、トップページへリダイレクトされた。しかしDBを確認するとデータが入ってない！!」</b>
ということです。


##問題を探る
そこで行なったのがこちら

- binding.pryでparamsに情報が入っているのか
- スペルミス等ないか要確認
- メソッドに「！」をつけて強行手段！！

まずはbinding.pry

```ruby
def create
    binding.pry
    @management_address = ManagementAddress.new(management_params)
    if @management_address.valid?
      @management_address.save
      redirect_to root_path
    else
      render :index
    end
end
```

きちんとparamsにデータがはいっているのか、、、
ターミナル↓

```ターミナル
[１] pry(#<ManagementsController>)> management_params
=> <ActionController::Parameters {"add_num"=>"000-0000", "area_id"=>"2", "city"=>"test",
　　　　　　　　　　　　　　　　　　　　　"add_line"=>"test", "add_build"=>"test", 
　　　　　　　　　　　　　　　　　　　　"tel_num"=>"09011112222", "user_id"=>2, "item_id"=>"8"} permitted: true>
[２] pry(#<ManagementsController>)> 
```

はいっています。次にスペルミス、変数の記述ミスを要確認.....


....どこも間違ってない！！

続いては新しく覚えた技「！マーク」
メソッドの後につけると強行的にその動作を行い、不足しているデータはnilとして保存したりします。
ということでcreateメソッドの後につけます。

フォームオブジェクト↓

```ruby
def save
    management = Management.create!(user_id: user_id, item_id: item_id)
    Address.create(add_num: add_num, area_id: area_id, city: city,
                   add_line: add_line, add_build: add_build,
                   tel_num: tel_num, management_id: management.id)
end
```
そして実行してみるとこのようなエラーが...!
<img width="500px" alt="hash.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076167/778810d8-bb5c-6ca3-dce1-61ed64511492.png">

どうもActiveHashのareaが怪しい...
しかしManagementsテーブルにはarea_idとは関係ありません。
DBを確認してarea_idをみてみます。

Managementsテーブル
<img width="500px" alt="management.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076167/13621437-d479-f2f9-8132-45306fa6992b.png">
Addressesテーブル
<img width="500px" alt="address.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076167/b4f7e020-2d6a-942f-d7ee-0d0922f6d329.png">

area_idのカラムは正しいテーブルにありました。
マイグレーションファイルも同様に、、、

それではつづいてareaのモデルファイルをみてみると、、、

```ruby
include ActiveHash::Associations
  has_many :items
  has_many :managements
```
という表記が！！

area_idを保存するテーブルはmanagementsでなくaddressesなので完全ここですね！！

```ruby
include ActiveHash::Associations
  has_many :items
  has_many :addresses
```
そしてそのままmanagementモデルのアソシエーションを消し、addressモデルにアソシエーションを記述します！

```ruby
extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to :area
```
このあとは無事DBに保存することができました！！

------
今回学んだことは「!」マークの使い方でした！！現役の方でも使う方が多くいるようなので頭に深く刻んどきます！！