2016-07-11 18 views
0

Ich möchte eine XLSX-temporäre Datei aus einem Formular an das Importmodell übergeben. Allerdings renne ich in ActiveModel::ForbiddenAttributesError. Ich habe starke Parameter korrekt definiert, aber es kann eine Besonderheit geben, wenn man mit virtuellen Spalten für Klassen ohne Attribute arbeitet.ActiveModel :: ForbiddenAttributesError für virtuelle Spalte in Klasse ohne Attribute

Die Modelllogik funktioniert, wenn auf einen lokalen Dateipfad verwiesen wird, also habe ich das meiste weggelassen. Hier ist mein Code:

new.html.erb

<%= form_for @package_import do |f| %> 
    <%= f.file_field :file %> 
    <%= f.submit "Import" %> 
<% end %> 

package_imports_controller.rb

class PackageImportsController < ApplicationController 
    def new 
    @package_import = PackageImport.new 
    end 

    def create 
    @package_import = PackageImport.new(params[:package_import]) 
    if @package_import.save 
     redirect_to root_url, notice: "Imported packages" 
    else 
     render :new 
    end 
    end 

private 

    def package_import_params 
     params.require(:package_import).permit(:file) 
    end 

end 

package_import.rb

class PackageImport 
include ActiveModel::Model 
... 
end 

Antwort

1

Sie müssen params[:package_import] zu package_import_params in @package_import = PackageImport.new(params[:package_import]) IhrerändernMethode.

def create 
    @package_import = PackageImport.new(package_import_params) 

    if @package_import.save 
    redirect_to root_url, notice: "Imported packages" 
    else 
    render :new 
    end 
end 
+1

Dies war ein Schritt in die richtige Richtung. Weil: file ein virtuelles Attribut ist, musste ich auch 'attr_accessor: file' zum Modell hinzufügen, damit es wie erwartet funktioniert. – sso777