0
.xlsxの一時ファイルをフォームからインポートモデルに渡したいとします。しかし、私はActiveModel::ForbiddenAttributesError
に入っています。私は正しく強力なパラメータを定義しましたが、属性のないクラスの仮想カラムを扱う際には特殊なことがあります。アトリビュートのないクラスのActiveModel :: ForbiddenAttributesError
モデルロジックはローカルファイルパスを指しているときに機能するので、私はほとんどを残しました。あなたのの@package_import = PackageImport.new(params[:package_import])
にpackage_import_params
にparams[: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
これは正しい方向へのステップでした。ファイルが仮想属性であるため、期待通りに動作させるために 'attr_accessor:file'をモデルに追加しなければなりませんでした。 – sso777