2016-07-11 2 views
0

Я хочу передать .xlsx tempfile из формы в модель импорта. Тем не менее, я столкнулся с ActiveModel::ForbiddenAttributesError. Я правильно определил сильные параметры, но может быть особенность при работе с виртуальными столбцами для классов без атрибутов.ActiveModel :: ForbiddenAttributesError для виртуального столбца в классе без атрибутов

Логика модели работает, указывая на локальный путь к файлу, поэтому я оставил большую часть ее. Вот мой код:

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 

ответ

1

Вам нужно изменить params[:package_import] к package_import_params в @package_import = PackageImport.new(params[:package_import]) из ваших create способ.

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

Это был шаг в правильном направлении. Поскольку: файл является виртуальным атрибутом, мне также пришлось добавить 'attr_accessor: file' в модель, чтобы она работала должным образом. – sso777