LoginSignup
10
12

More than 3 years have passed since last update.

HTMLのname属性とストングパラメーターのキーとの関係性について

Posted at

 コントローラには、ストロングパラメータというDBに保存するparameterのキー(カラム名)を指定するものがある。ここでは、そもそもparameterのキーはどこから送られてくるのか、なぜ、キーを指定なければならないのか、について書いていきます。

parameterのキーはどこから送られてくるのか?

ユーザーのリスエストする際に送られるparamsは、viewの方(新規投稿画面など)から送られてきている。そして、viewの方では、どのような設定がなされているのかというと、ここではparamsのキーを設定するためのHTMLのname属性というのが理解の鍵となる。

※ちなみに、parameterとは、ユーザーがリクエストする際に入力される1つ1つのデータのことをいう。そして、paramsとは、parameterが複数あるもので、データのまとまりのことをいう。

name属性とは何か?

name属性は、parameterに対してデータとしての名前をつけることができるHTML属性である。これによって、ユーザーがリクエストをする際に、viewの方で入力されたparameterにnameのキーをつけることができる。name属性をつけるときは、保存したいデータベースのカラム名にすること。

以下の例では、ユーザが入力した文章はtextで、画像のURLはimageというキーをつけている。(今回はわかりやすく説明するため、form_tagを使いました。)

新規投稿画面のview


<div class="contents row">
    <div class="container">
      <%= form_tag('/tweets', method: :post) do %>
        <h3>
          投稿する
        </h3>
        <input placeholder="Image Url" type="text" name="image">
        <textarea cols="30" name="text" placeholder="text" rows="10"></textarea>           
        <input type="submit" value="SENT">
      <% end %>
    </div>
  </div>

そして、コントローラの方でストロングパラメータのキーにname属性ので指定したキーを設定すれば、入力されたparameterのキーとストロングパラメータのキーが一致して、紐づけができるようになる。
以下では、新規登録画面のviewのname属性のキーとストロングパラメーターのキーが一致
しているため、ユーザが新規登録した内容のparamsがDBに保存されるようになる。


params.permit(:image, :text)

コントローラのストロングパラメーター


  def create
    Tweet.create(image: tweet_params[:image], text: tweet_params[:text], user_id: current_user.id)
  end

private
  def tweet_params
    params.permit(:image, :text)
  end
10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12