WeBlog

Webに関する情報を中心に発信してるブログ

【Rails】RailsでURLに「?キー = 値」を指定する方法

Railsでよく見みるルーティングとして下記のような7つの基本的なルーティングがあります。

動的なルーティングには:idという部分にオブジェクトのidを埋め込むことができます。

boards     GET    /boards(.:format)               boards#index
           POST   /boards(.:format)               boards#create
new_board  GET    /boards/new(.:format)           boards#new
edit_board GET    /boards/:id/edit(.:format)      boards#edit
board      GET    /boards/:id(.:format)           boards#show
           PATCH  /boards/:id(.:format)           boards#update
           PUT    /boards/:id(.:format)           boards#update
           DELETE /boards/:id(.:format)           boards#destroy

では、下記のようなhref属性が"/bookmarks?board_id=20"なふうになっているルーティングはどうやって作るのでしょう?

<a rel="nofollow" href="/bookmarks?board_id=20">
リンクです
</a>

このパスの特徴として? キー = 値という形になっています。

実際にやってみた

例えば下記のようなルーティングがあったとします。

bookmarks POST   /bookmarks(.:format)    bookmarks#create

ビューファイルでbookmarks_path引数にboard_id: 24のようにキーと値という形で書いてあげると、下記のようなHTMLになります。

<%= link_to bookmarks_path(board_id: 24), method: :post do %>
リンクです。
<% end %>

# HTML
<a rel="nofollow" href="/bookmarks?board_id=20" data-method="post">
リンクです
</a>

実際にリンクを押してブラウザのデベロッパーツールのNetWorkタブで確認してみると、

Request URL: http://localhost:3000/bookmarks?board_id=24

Query String Parameter board_id: 24

という形で、サーバー側に渡っています。

f:id:weblog_tec:20210424231844p:plain f:id:weblog_tec:20210424231903p:plain

Railsではparameという中に入っています。

なのでコントローラーでparams[:board_id]と指定すると、値を取得できます。