Railsのフォームで配列とハッシュを併用する
ハッシュだけ、配列だけの書き方は色んな所で書かれているが、 併用した書き方がなかなか見つからず困った。
古いが以下の記事が一通りまとまっていてわかりやすかった。
Rails のフォームで配列形式のデータを扱う方法 - WebOS Goodies
ハッシュのみ
HTML
<input type="text name="user[name]" />
params
user => { name: 'Taro' }
ストロングパラメータ
params.require(:user).permit(:name)
配列のみ
HTML
<input type="text name="name[]" />
params
name => ['Taro', 'Ichiro']
ストロングパラメータ
params.permit(name: [])
- 配列を許可する時は空配列を指定する
ハッシュの配列
HTML
<input type="text name="users[][name]" />
params
users => [ { name: 'Taro' }, { name: 'Ichiro' }, ]
ストロングパラメータ
params.permit(users: [:name])
http://j-caw.co.jp/blog/?p=1590
Strongパラメータの意味
リクエストの内容をそのまま使ってDBを更新すると管理者の状態でユーザー登録できたりと脆弱性をうむので、 Rails4から更新するパラメータのみ許可することになった。ストロングパラメータを使っていないとエラーになる。
requireを使う意味がわかったようなわからないような... 複数のエンティティを同時に送る時には便利そうだが。