我正在使用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 %>
答案 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
。我意识到这个答案依赖于一个假设,所以如果你没有使用上面提到的两个数据存储中的一个,请告诉我,我会把它拉下来。