我正在使用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.idname覆盖。

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>

10-07 19:38
查看更多