0
0

More than 1 year has passed since last update.

なぜcreateメソッドのparamsのみparams.requireメソッドが代入されるのか。

Posted at

理解が曖昧だったため、整理のために記事を投稿。

それはcreateメソッドとそれ以外において、役割が異なるためである。
また、ここでは、newとindexメソッドは省く。

createメソッドの役割は、newのviewにおいて記載され、ストロングパラメーターとなった(許可された)情報を取得し、保存することにある。
そのため、データベースのテーブルから、レコードを一つ取り出すメソッドであるfind(params[:id])は使えない。
そのため、createメソッドに対し、params.requireの中身を代入することになる。

task.controller.rb

  def create
    @task=Task.new(task_params)
    if @task.save
      redirect_to tasks_path, notice: "作成しました"
    else
      render 'new'
    end
  end

private

  def task_params
    params.require(:task).permit(:title, :content, :start_time, :is_done, :pet_id, :family_id)
  end



一方、show,destroy,edit,updateにおいては、テーブル内に保存されている1つのidに紐づいた情報を取得したい。
そのため、上記の場合には、find(params[:id])メソッドを使うことになる。

task.controller.rb
  def show
    @task = Task.find(params[:id])
  end

  def destroy
    @task = Task.find(params[:id])
    @task.destroy
    redirect_to tasks_path, notice:"削除しました"
  end

  def edit
    @task = Task.find(params[:id])
  end

  def update
    @task = Task.find(params[:id])
    if @task.update(task_params)
      redirect_to tasks_path, notice: "編集しました"
    else
      render 'edit'
    end
  end

以上である。

0
0
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
0