MENU

form_forのリクエストをjson化する

今回は

 

ステータスにの変更に連動して、ステータスを更新したいなと思いました。

 

前提

```

Projectモデル

title

status

 

enum status: {

 open:1,

 close:2

}

```

 

 

要件

 

- 1.表示画面で、現在のモデルのステータスを表示する

- 2.ステータスの変更に応じてコントローラーにリクエストを表示する

- 3.レスポンスのタイミングで、ステータスに色をつける

 

1.に関しては単純にこんな感じ

```

= form_for @project, do |f|

  = f.text_field :title

  = f.collextion_select :status, Project.statuses_i18n, :first, :last, {}, class:"project_status"

  = f.submit '送信', class:"none" # submitはボタンをsisplay:none;

```

 

2.に関しては、

 

project_statusのクラス名に onイベント && changeで反応されました

 

```

これのいいところは、リクエストを送った場合のparamsが

 project: {status: "open"}などのネストで送られるところかな

$(function() {

  $('.project_statys').on('change', function() {

     $(this).closest('form').find('[type=submit]').click();    

  });

});

```

 

ここで問題リクエストのタイプがhtmlなので、jbuilderが使えない

 

そこで下記対応

 

この2つをform_forに追加すればjsonのリクエストができる

- remote: true

- format: :json

```

= form_for @project, remote: true, format: :json do |f|

  = f.text_field :title

  = f.text_field :price

  = f.submit '送信'

```