2016-05-26 9 views
0

Ich habe ein Audi-Modell in meiner Ruby on Rails-Anwendung, in der es viele Felder wie Modell, Variante, Auto Bild, Exterieur, Interieur, Broschüre usw. gibt Um einige Attribute (nicht alle) zu aktualisieren, gibt es undefinierte Methode `each 'für nil: NilClass im äußeren und inneren Bildbereich.undefined Methode `each` für Null: NilClass in Update-Methode

Genauer gesagt ist das Problem hier:

params[:exterior_image].each { |exterior_image| ... } 

Update-Methode:

def update 
    respond_to do |format| 
     @audi_model = AudiModel.find(params[:id]) 
     if @audi_model.update(audi_model_params) 
      model_exterior_image_names = @audi_model.car_exterior_images.map{|m|m.exterior_image_file_name} 
      params[:exterior_image].each { |exterior_image| 
      unless model_exterior_image_names.include?(exterior_image.original_filename) 
      @audi_model.car_exterior_images.create(exterior_image: exterior_image) 
      end 
      } 
      model_interior_image_names = @audi_model.car_interior_images.map{|m|m.interior_image_file_name} 
      params[:interior_image].each { |interior_image| 
      unless model_interior_image_names.include?(interior_image.original_filename) 
      @audi_model.car_interior_images.create(interior_image: interior_image) 
      end 
      } 
     format.html { redirect_to @audi_model, notice: 'Audi model was successfully updated.' } 
     format.json { render :show, status: :ok, location: @audi_model } 
     else 
     format.html { render :edit } 
     format.json { render json: @audi_model.errors, status: :unprocessable_entity } 
     end 
    end 

Anfrage Parameter:

{"utf8"=>"✓", 
"_method"=>"patch", 
"authenticity_token"=>"3qiq/VNRNk369HEZr0Eb/R5iuhKgGTpJCfOh8ek3nGWLeU+zDNDvEAwJ3SvlLb0h4gVql549d3GnCV9Fa/ZnNA==", 
"audi_model"=>{"car_model"=>"TT", 
"variant"=>"Diesel", 
"introduction"=>"test", 
"engine"=>"test", 
"video_url"=>"https://www.youtube.com/watch?v=N3x_RZlOmK0", 
"brochure_url"=>"http://www.audigurgaon.in/brochure/tt-brochure-2014.pdf"}, 
"commit"=>"Update Audi model", 
"id"=>"19"} 
+2

die 'params' Überprüfen Sie auf die Update-Aktion kommt und es in der Frage stellen. – Pavan

+0

Können Sie das Formular zur Aktualisierung Ihres Modells posten? Fügen Sie am Anfang der Methode ein "Raise" hinzu und geben Sie "params" ein, um zu sehen, was übergeben wird. Stellen Sie hier die Parameter –

+0

Audi Modell in einer Tabelle, die alle oben genannten Parameter enthält, und es gibt zwei Fremdschlüsseltabellen, nämlich Außenaufnahmen und Außenaufnahmen. Also versuche ich die Parameter in audi model table zu aktualisieren, aber nicht exterior und interior – Ekta

Antwort

1

Ihre params nicht :exterior_image Schlüssel hat, so es würde nil zurückgeben . Sie müssen überprüfen, ob params[:exterior_image] nicht Null ist und rufen Sie dann .each Methode darauf.

params[:exterior_image].each do |exterior_image| 
    unless model_exterior_image_names.include?(exterior_image.original_filename) 
     @audi_model.car_exterior_images.create(exterior_image: exterior_image) 
    end 
end if params[:exterior_image] 

Alternativ kann ein leeres Array geben:

(params[:exterior_image] || []).each do |exterior_image| 
    unless model_exterior_image_names.include?(exterior_image.original_filename) 
     @audi_model.car_exterior_images.create(exterior_image: exterior_image) 
    end 
end 
+0

Danke! Es klappt. – Ekta

Verwandte Themen