4
3

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 5 years have passed since last update.

rails備忘録2 params[:text] が取得できない

Last updated at Posted at 2019-04-27

未だによくわからないバグが発生したので、その対処法を此処に忘れないように記す。
理由が分かる方がいればコメントをお願いします。

まだ推測ですが原因もわかってきました。

ピザのレビューを書くために、そのピザのidとピザに対するレビュー内容(text)を取得する処理を記入

reviews_controller.rb
class ReviewsController < ApplicationController
  def create
    @review = Review.create(text: create_params[:text], pizza_id: create_params[:pizza_id])
    redirect_to root_path
  end

  private
  def create_params
    params.require(:review).permit(:text, :pizza_id).merge(user_id: current_user.id)
  end
end

このようにして、formに入力された内容を取得して表示させたかったのだが.....

current_user.nameしか表示されない......

view, controllerそのほかを見てもよくわからない....

そこでbinding.pryでデバッグを行なう。
59b0f02733861427decb2ea6ad1d7eb3.png

paramsで取得しようとすると失敗したので、メソッド名のcreate_paramsで試す...

029592c4359079e392ba02eb811a0128.png

textは取得できた...しかしpizza_id(ピザ側の識別子)の方は取得できない。

そこでcreateメソッド内の記述を変更

reviews_controller.rb
class ReviewsController < ApplicationController
  def create
    @review = Review.create(text: create_params[:text], pizza_id: params[:pizza_id])
    redirect_to root_path
  end

  private
  def create_params
    params.require(:review).permit(:text).merge(user_id: current_user.id)
  end
end

textはprivateメソッドのcreate_pramsから取得。
pizza_idはparamsで取得しました。

####レビュー取得成功!!

どうやら識別子であるpizza_idはform_forを使用した時にはストロングパラメータには入らないようなので、paramsで取得しなければならないようです・・・

4
3
2

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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?