LoginSignup
0
1

More than 3 years have passed since last update.

margeメソッドを使う意義

Last updated at Posted at 2019-08-18

mergeメソッドとは、2つのハッシュを結合する時に使うメソッドである。今回は、このメソッドはどうして使われているのか、というmergeメソッドの意義について書いていきます。

mergeメソッドが使われる場面
mergeメソッドが使われる場面としては、ユーザーが入力したparamsをDBに保存する時に使うことが多いです(個人的な感想)。
では、mergeメソッドを使わなかった時と使った時とで、どのような違いがあるのかを説明していきたいと思います。

mergeメソッドを使わなかった時

例えば、以下のような新規等投稿画面があった時、ストロングパラメーターに保存されるデータは、新規等投稿画面のviewの方で、name属性で指定したtext(ユーザーが入力した文章)とimage(ユーザーが入力した画像のURL)しかDBに保存されない(ただし、paramsとしてコントローラには送られてくる。)。そのため、データを入力したuserのidをDBに保存することがデッキ無くなってしまうため、コントローラのcreateアクションの引数にuser_idを指定しなければならなくなる。そうすると、createアクションの引数のコードが長くなり、可読性は失われてしまう。

新規投稿画面の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>

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


  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

mergeメソッドを使った時

mergeメソッド使えば、paramsとして送られてきたcurrent_user.idのデータをストロングパラメーターのキーと結合させることができるようになり、createアクションの引数のコードを短くすることができ、可読性を保つことができるようになる。

mergeメソッド使った時のcreateアクションの引数とストロングパラメーター


  def create
    Tweet.create(tweet_params)
  end

private
  def tweet_params
    params.permit(:image, :text).merge(user_id: current_user.id)
  end
0
1
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
0
1