2016-07-11 13 views
0

.xlsxの一時ファイルをフォームからインポートモデルに渡したいとします。しかし、私はActiveModel::ForbiddenAttributesErrorに入っています。私は正しく強力なパラメータを定義しましたが、属性のないクラスの仮想カラムを扱う際には特殊なことがあります。アトリビュートのないクラスのActiveModel :: ForbiddenAttributesError

モデルロジックはローカルファイルパスを指しているときに機能するので、私はほとんどを残しました。あなたのの@package_import = PackageImport.new(params[:package_import])package_import_paramsparams[:package_import]を変更する必要が

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

:ここに私のコードです方法。

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

関連する問題