Rails将JavaScript对象存储到Model的有效方法?

时间:2016-05-13 19:41:58

标签: javascript ruby-on-rails filepicker.io

我正在使用FileStack API和文件选择器gem(https://github.com/Ink/filepicker-rails)。我有一个附件模型,其中:标题为字符串。上传文件时,FilePicker API中的URL将存储为:title。但是gem有一个onchange方法,它返回一个事件变量作为包含文件属性的JSON对象。我使用JavaScript来访问这些属性,但我想在Rails中找到一种方法来存储这些属性,通过JavaScript访问模型,以便我可以通过其余的Rails应用程序访问它。

<%= filepicker_js_include_tag %>

<%= simple_form_for(@attachment) do |f| %>

<%= f.filepicker_field :title, onchange: 'onUpload(event)' %>
<%= f.submit %>

<% end %>

<script>
 function onUpload(event) {
 console.log(event);
 var name = event.fpfile.filename;
 console.log(name);
}
</script>

更新

因此,在查看您的解决方案并在Google搜索之后,我使用ajax通过路由将数据发送到控制器。下面是我更新的Javascript以及路由和控制器。当我渲染并检查@foo实例变量时,它是零。所以我的数据没有正确通过。此外,从触发Javascript函数到显示索引视图的整个过程现在非常慢。在查看您的解决方案并进行更多挖掘之后,我认为我有正确的想法,但我错过了一些东西和/或过于复杂。任何建议都将不胜感激。

 <script>
   function onUpload(event) {
   var name = event.fpfile.filename;
   jQuery.ajax({
   data : { data_value: event },
   type: 'post',
   url: "/attachment/index"
  });
 }
</script>

路线

post 'attachments/' => 'attachment#index'

控制器

def index
    @attachments = Attachment.all
    @foo = params[:data_value]
end

查看(返回零)

<%= raise @foo.inspect %>

1 个答案:

答案 0 :(得分:2)

如果您使用的是Postgres 9.3或更高版本,则应考虑使用hstore模块并创建JSON列。在迁移中,您可以执行以下操作:

add_column :your_model, :your_attribute, :json

然后您可以更新YourModel.your_attribute => {'your': 'JSON here'}

文档:http://edgeguides.rubyonrails.org/active_record_postgresql.html#json

如果你正在使用MySQL,这很棘手,但可行。您必须创建一个文本列并将JSON保存为字符串,并在每次与其交互时解析它。 Postgres肯定更善于处理JSON。我意识到这个答案依赖于一个假设,所以如果你没有使用上面提到的两个数据存储中的一个,请告诉我,我会把它拉下来。