68 votes

Différences de rails entre nouveau + enregistrer et créer

Je suis nouveau sur les rails et je ne comprends pas les différences entre l'utilisation des méthodes new+save et la méthode create.

 def create
    @item = Item.new(params[:item])

    respond_to do |format|
      if @item.save
        format.html { redirect_to @item, notice: 'Item was successfully created.' }
        format.json { render json: @item, status: :created, location: @item }
      else
        format.html { render action: "new" }
        format.json { render json: @item.errors, status: :unprocessable_entity }
      end
    end
end

et:

   def create

    respond_to do |format|
      if Item.create(params[:item])
        format.html { redirect_to @item, notice: 'Item was successfully created.' }
        format.json { render json: @item, status: :created, location: @item }
      else
        format.html { render action: "new" }
        format.json { render json: @item.errors, status: :unprocessable_entity }
      end
    end
  end

59voto

pjumble Points 10734

En interne, create appelle new puis save quand même :

   def create(attributes = nil, options = {}, &block)
    if attributes.is_a?(Array)
      attributes.collect { |attr| create(attr, options, &block) }
    else
      object = new(attributes, options, &block)
      object.save
      object
    end
  end

5voto

Said Kaldybaev Points 3306

lorsque vous utilisez, rails crée en fait les enregistrements mais ne les enregistre pas, donc dans le processus, vous pouvez également affecter smth

 @item = Item.new(params[:item])

mais quand tu utilises :

 if Item.create(params[:item])
.....

il va immédiatement créer et enregistrer

vous pouvez le vérifier avec rails c

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X