3

を使用して新しいリソースを作成するrails generate scaffold personと、次のコントローラ アクションが に対して作成されdestroyます。

class PeopleController < ApplicationController
  def destroy
    @person = Person.find(params[:id])
    @person.destroy

    respond_to do |format|
      format.html { redirect_to people_url }
      format.json { head :no_content }
    end
  end
end

destroy独自のアクションを作成するときは、常にこの構文を複製してきました。

私の質問は、なぜ生成されたコードは:

  1. 使用されていないインスタンス変数を割り当てますか?
  2. 1 つだけが必要な場合に 2 つのデータベース呼び出しを実行しますか?

次のコードは同等ですか、それともこの方法で行われない理由はありますか?

class PeopleController < ApplicationController
  def destroy
    Person.destroy(params[:id])

    respond_to do |format|
      format.html { redirect_to people_url }
      format.json { head :no_content }
    end
  end
end
4

1 に答える 1

1

ソースコードを見ると、次Person.destroy(params[:id])と同等であることがわかりPerson.find(params[:id]).destroyます。

# File activerecord/lib/active_record/relation.rb, line 377
def destroy(id)
  if id.is_a?(Array)
    id.map { |one_id| destroy(one_id) }
  else
    find(id).destroy
  end
end
于 2013-02-27T17:53:41.387 に答える