2017-04-10 4 views
0

Ich versuche, das Namensfeld eines Modells mit dem Juwel best_in_place zu bearbeiten, um Elemente direkt in der Zeile zu bearbeiten. Wenn ich das versuche, bekomme ich einen Fehler 422 Unprocessable Entity.Rails best_in_place Unprocessable Entity

Ich habe einige Nachforschungen gemacht und herausgefunden, dass der Controller in der Antwort nicht nur das Namensattribut, sondern auch die Gruppe und einige andere Attribute erwartet.

["Group must exist","Lumo can't be blank","Lumo is not a number"] 

Ich habe meinen Controller in der richtigen Weise eingerichtet (denke ich).

materials_controller.rb 

def update 
    @material = Material.find(params[:id]) 

    if params[:commit] == "Save" then 

    success = @material.update(material_params) 
    params[:create_pure_composition] = false 
    else 
    @material = Material.new(material_params) 
    @material.user_id = current_user.id 
    success = @material.save 
    end 

    respond_to do |format| 
    if success 
     plot1 = prepare_e_plot(@material) 
     plot2 = prepare_st_plot(@material) 
     format.html { redirect_to @material } 
     format.json { render json: { plot1: plot1, plot2: plot2, status: 200 } } 
    else 
     format.html { render 'edit' } 
     format.json { respond_with_bip(@material) } 
    end 
    end 
end 

Gibt es eine Möglichkeit mit best_in_place diesen Wert zu senden, wenn Sie die Attributnamen zu aktualisieren? Ich habe es mit dem Attribut params von best_in_place versucht.

Dies hat keine zusätzlichen Parameter mit dem Update gesendet.

Hier ist, was das Materialmodell aussieht.

material.rb 

class Material < ActiveRecord::Base 

    belongs_to :user 
    belongs_to :group 

    validates :name, presence: true, uniqueness: {scope: :user_id} 
    validates :lumo, presence: true, numericality: true 

end 

Weiß jemand, warum es nach anderen Attributen fragt und warum best_in_place diese nicht schickt?

Antwort

0

Ich habe herausgefunden, was das Problem war und wie es zu beheben ist. Wir verwenden eine Option zum Speichern oder Speichern unter beim Bearbeiten von Materialien. In der Steuerung suchen wir deshalb nach dem params[:commit].

Durch Bearbeiten der URL konnte ich die params[:commit] mit dem Update mit best_in_place senden. Hier ist, wie der Code "best_in_place" endete:

<%= best_in_place @material, :name, as: :input, url: material_path(@material, commit: "Save") %> 
Verwandte Themen