【问题标题】:Rails efficient way to store JavaScript object to Model?Rails 将 JavaScript 对象存储到模型的有效方法?
【发布时间】:2016-05-13 19:41:58
【问题描述】:

我正在使用 FileStack API 和文件选择器 gem (https://github.com/Ink/filepicker-rails)。我有一个 :title 作为字符串的附件模型。上传文件时,来自 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>

更新:

因此,在查看您的解决方案并四处搜索后,我正在使用 ajax 通过路由将数据发送到控制器。下面是我更新的 Javascript 以及路由和控制器。当我渲染和检查 @foo 实例变量时,它是 nil。所以我的数据没有正确传递。此外,从触发 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 %>

【问题讨论】:

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


    【解决方案1】:

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

    add_column :your_model, :your_attribute, :json
    

    然后你就可以更新YourModel.your_attribute =&gt; {'your': 'JSON here'}

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

    如果您使用的是MySQL,这很棘手,但可行。您必须创建一个文本列并将JSON 保存为字符串,并在每次与它交互时对其进行解析。 Postgres 绝对更擅长处理JSON。我意识到这个答案依赖于一个假设,所以如果您不使用提到的两个数据存储之一,请告诉我,我会删除它。

    【讨论】:

    • 感谢您的建议。我使用 postgres,因为我使用的是 Heroku。那么我将如何传入我在上面的函数中获得的 JavaScript 对象呢?变量名?
    • 您必须将其发布到路由并设置控制器操作以查找有问题的对象并更新属性。
    • 你不能只使用 Javascript。
    • 某些东西正在工作,因为这发生在终端 Processing by AttachmentsController#create as */* Parameters: {"data_value"=&gt;"discussion_technology.doc"} 我在 index 操作中定义了 @foo = params[:data_value] 但是当我尝试通过 在 index.html.erb 中它是 nil。不知道我错过了什么。我还更新了我的路线如下post 'attachments/:data_value' =&gt; 'attachment#index'。我需要有关如何通过路由将 data_value 正确发送到索引控制器的帮助。谢谢!
    • 另外,我认为您超出了原始问题的范围。您可能应该询问有关此功能的新功能。
    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    相关资源
    最近更新 更多