我正在使用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 %>
感謝您的建議。自從我使用Heroku以來,我使用了postgres。那麼如何傳遞我在上面的函數中獲得的JavaScript對象呢?變量名? – user3318660
您必須將其發佈到路由並設置控制器操作以查找有問題的對象並更新屬性。 –
你只能用Javascript才能做到這一點。 –