回答編集履歴

1 文言を修正

mingos

mingos score 2109

2017/01/25 16:02  投稿

> ここでいまいちピンとこないのが、name属性です。
> 普通ハッシュの値を取得する際などは、paper[:title]などとして取得すると思うのですが、params[title]という書き方の理由がよくわかりません。
えーと、このHTMLの例ではparams[title]では取得できないと思います。
paramsに格納されるハッシュの形がこうなっているわけですよね。
```ruby
{paper: {title: "入力した内容", content: "入力した内容"}}
```
これは、書き方が違うだけで、以下と同じ意味
これは、書き方が違うだけで、以下と同じ意味になります。
```ruby
{
 :paper => {
   :title => "入力した内容",
   :content => "入力した内容"
 }
}
```
そのため、:titleを取り出したいなら、
params[:paper][:title]で取得する事になります。
### name属性とparamsの対応について  
### name属性とparamsの対応について
ルールをまとめましたので、ご確認ください。
### 基本ルール
name属性がそのままparamsのキー(シンボル)になる。
```html
<form ...>
 <input type="text" name="text1" />
 <input type="submit" name="btnPost" value="投稿する">
</form>
```
これをPOSTすると、paramsの中身はこうなるというルールがあります。
```ruby
{
 :text1 => "入力された内容",
 :btnPost => "投稿する"
}
```
### 特別ルールその1
ハッシュになるパターン。
name属性に[]を含め、かつ[]の中が空でない場合。
```html
<form ...>
 <input type="text" name="text[t1]" />
 <input type="text" name="text[t2]" />
 <input type="submit" name="btnPost" value="投稿する">
</form>
```
```ruby
{
 :text => {
   :t1 => "入力された内容",
   :t2 => "入力された内容",
 }
 :btnPost => "投稿する"
}
```
### 特別ルールその2
配列になるパターン。
name属性に[]を含め、かつ[]の中を空にする。
```html
<form ...>
 <input type="text" name="text[]" />
 <input type="text" name="text[]" />
 <input type="submit" name="btnPost" value="投稿する">
</form>
```
```ruby
{
 :text => [
   "入力された内容",
   "入力された内容"
 ]
 :btnPost => "投稿する"
}
```
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る