ActiveModel::ForbiddenAttributesError class 中的虚拟列没有属性
ActiveModel::ForbiddenAttributesError on virtual column in class without attributes
我想将 .xlsx 临时文件从表单传递到导入模型。但是,我 运行 进入 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
您需要在 create
方法的 @package_import = PackageImport.new(params[:package_import])
中将 params[:package_import]
更改为 package_import_params
。
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
我想将 .xlsx 临时文件从表单传递到导入模型。但是,我 运行 进入 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
您需要在 create
方法的 @package_import = PackageImport.new(params[:package_import])
中将 params[:package_import]
更改为 package_import_params
。
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