【Rails】任意のパラメーターをサーバーに送りたい

新たにモデルを生成し、ルーティングやコントローラー、ビューも生成しました。それから特定の情報(id)をパラメーターとして送りつつ、情報を追加する実装をしました。 具体的には、一度投稿している物を商品として出品するという機能です。投稿の詳細から商品出品ページに遷移します。

エラー1

NoNameError
クラス名とファイル名が一致しないというような内容がエラー文にありました。こういうときは、ビューファイル名、モデル名、コントローラー名を確認してみる。単数形とか複数形に注意。 僕の場合は、クラスのアクションで定義している変数名にスペルミスがあった。

エラー2

パラメーターでidが送られてきていない。
paramsの中身を確認してみると、idの代わりにformatというのが送られてきている。
しかも、そのformatの番号は、idであるはずの番号。
formatで何だ?
少し調べてみると、データ形式のことで、ターミナルでルーティングを確認してるときにいつも見てるやつだった。 なぜこれが急にparamsに入ってたのかはよく分からなかった。
ちなみに、このformatの番号はidの番号なので、params[:format]という感じでidと同じように取得して使えないかなと試してみたけど無理だった。
僕としては、formatではなくてidが送られてきてほしい。 ターミナルで確認しても、ルーティングにidは含まれないみたい。

Image from Gyazo

link_toでパラメータを持たせサーバに送る

答えはシンプルで、自分でidを持たせるように指定したらいい。
link_toを使っていたけど、urlにPrefixを使って記述していたから引数には変数しか入れれないと思い込んでいた。

<%= link_to '売る', new_sale_path(id: book.id) %>

ハッシュを引数に入れてあげることで、任意の情報をサーバーに送ることができる。

終わりに

エラーの原因はスペルミスだったり、パラメーターにあったりと基礎をしっかりしていればすぐに解決できる内容が増えてきているので、こういった復習やアウトプットを継続してこつこつやるのはとても大事ですね。 昨日学んだことを翌日の朝にブログを書いてアウトプットするようにすると、良い学習の始まりになります。