2016-05-13 52 views
1

我正在使用FileStack API和文件選取器gem(https://github.com/Ink/filepicker-rails)。我有一個附件模型,其中包含:title作爲字符串。上傳文件時,FilePicker API中的URL存儲爲:title。但是gem有一個onchange方法,它返回一個事件變量作爲包含文件屬性的JSON對象。我使用JavaScript來訪問這些屬性,但是我想在Rails中找到一種方法來將這些屬性(通過JavaScript訪問)存儲在模型中,以便我可以通過其餘的Rails應用程序訪問它。Rails將JavaScript對象存儲爲Model的高效方法?

<%= 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> 

更新:

所以尋找到解決方案和周圍的Googling我使用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 

視圖(返回nil)

<%= raise @foo.inspect %> 

回答

1

如果您使用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時一定會更好。我意識到這個答案依賴於一個假設,所以如果你沒有使用提到的兩個數據存儲庫中的一個,請告訴我,我會把它放下。

+0

感謝您的建議。自從我使用Heroku以來,我使用了postgres。那麼如何傳遞我在上面的函數中獲得的JavaScript對象呢?變量名? – user3318660

+0

您必須將其發佈到路由並設置控制器操作以查找有問題的對象並更新屬性。 –

+0

你只能用Javascript才能做到這一點。 –

相關問題