我正在使用FileStack API和filepicker gem(https://github.com/Ink/filepicker-rails)。我遵循使用OnChange访问FilePicker文件下的文档中概述的步骤。我试图获取JSON浏览器响应属性,文件名,通过路由将其传递给我的Rails控制器,并将其另存为:name在我的Attachment模型中。
附件/新视图
<%= filepicker_js_include_tag %>
<%= simple_form_for(@attachment) do |f| %>
<%= f.filepicker_field :title, multiple: 'true', onchange: 'onUpload(event)' %>
<%= f.submit %>
<% end %>
<script>
function onUpload(event) {
var name = event.fpfile.filename;
jQuery.ajax({
data: { "attachment[name]": name, "attachment[title]": url },
type: 'post',
url: "/attachments"
});
}
</script>
路线
post 'attachments/' => 'attachment#create'
附件控制器
def create
@attachment = current_user.attachments.build(attachment_params)
if @attachment.save
redirect_to attachments_path
else
render root_path
end
end
...
private
def attachment_params
params.require(:attachment).permit(:title, :user_id, :name)
end
我已经浏览了相关的SO帖子,这就是我实现此实现的方式。但是,当我在rails控制台中查看我的附件模型时,名称为nil。我的数据没有正确传递。我不确定是否缺少步骤或路由不正确。任何建议将不胜感激。
最佳答案
您的控制器超级混乱,删除了其中的大多数,只是保持简单,如下所示。该行将为您current_user.id
和name
覆盖。
def create
@attachment = current_user.attachments.build(attachment_params)
if @attachment.save
redirect_to attachments_path
else
render root_path
end
end
另外,同时您有params许可
params.require(:attachment).permit(:name, :title, :user_id)
您必须像这样传递数据
"attachment[name]"
,但要传递的是简单的"name"
。这就是得到Unpermitted parameter: name
的原因。正如@anonymousxxx提到的,从路由中删除:name
部分!脚本
<script>
function onUpload(event) {
var name = event.fpfile.filename;
jQuery.ajax({
data: { "attachment[name]": name },
type: 'post',
url: "/attachments"
});
}
</script>