20
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初学者向け】Rails mergeメソッド

Last updated at Posted at 2020-09-22

記事の目的

初学者の為、間違っているところはご指摘頂けると幸いです。
備忘録・アウトプット目的で投稿です。

2021/1/10:追記
Qiita初投稿でチェリー本の伊藤さんから記事の間違いを指摘頂きました🙇‍♂️

##mergeメソッドとは?
ストロングパラメータの設定の最後にでてくるmerge

 def review_params
    params.require(:review).permit(
    :memo,
    :image)
    .merge(user_id:current_user.id)  ←これです
 end

##mergeメソッドについて(チェリー本より引用)
なんだこのメソッドは?とRailsの参考書等(Railsチュートリアル、現場Rails)等で調べるもない。
チェリー本をみてみると、メソッドについて説明がなされていた。以下、例文と説明。

h = { us: 'dollar', india: 'rupee' }

{ japan: 'yen' }.merge(h) #=> {:japan=>"yen", :us=>"dollar", :india=>"rupee"}

mergeメソッドを使うことによって、ハッシュリテラル内({ japan: 'yen', h})のほかのハッシュのキーと値({ us: 'dollar', india: 'rupee' })を展開できる。ふむふむ。

##Railsにおけるmergeメソッドを使う意味
で、なんの為のmergeなんだっけ?
記事をみてみると、「ユーザから受け取ったparamsにはないけれども、レコード作成時に追加したい値がある場合はmergeメソッドで含めることができる」と書いてあった。
例えば、Reviewモデルに関して送られるパラメータ以外にuser_idを含めたい!そんな時、mergeメソッドを使うわけですね。

 def review_params
    params.require(:review).permit(
    :memo,
    :image)
    .merge(user_id:current_user.id)
 end

チェリー本を見た時、ほかのハッシュのキーと値を展開できるとあるが、「どういう場面で?」と思いながらの「ふむふむ。」だったが、「こう言う時に使えるんだ」と思えました。
チェリー本ありがとう。

20
23
1

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
20
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?