2016-05-13 3 views
1

私はFileStack APIとファイルピッカー宝石(https://github.com/Ink/filepicker-rails)を使用しています。私は文字列としてタイトルを持つAttachmentモデルを持っています。ファイルがアップロードされると、FilePicker APIのURLは:titleとして格納されます。しかし、この宝石には、ファイルの属性を含むJSONオブジェクトとしてイベント変数を返すonchangeメソッドがあります。私はJavaScriptを使ってこれらの属性にアクセスしますが、JavaScriptを介してモデルにアクセスしてこれらの属性を格納する方法を探して、残りのRailsアプリケーションからアクセスできるようにしたいと考えています。モデルにJavaScriptオブジェクトを効率的に格納する方法を教えてください。

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

ビュー(はnilを返す)

<%= raise @foo.inspect %> 

答えて

1

あなたがの使用を検討すべきであるPostgres 9.3またはあなたの上を使用している場合モジュールを作成し、JSON列を作成します。あなたが行うことができ、移行中:

add_column :your_model, :your_attribute, :json 

そして、あなたはちょうどここにYourModel.your_attribute => {'your': 'JSON here'}

ドキュメント更新することができます:あなたはMySQLを使用している場合、それは難しいが、なんとかだhttp://edgeguides.rubyonrails.org/active_record_postgresql.html#json

を。テキスト列を作成してJSONを文字列として保存し、対話するたびに解析する必要があります。 Postgresは明らかにJSONを扱う方が優れています。私は、この答えは前提に基づいていることを認識しています。もしあなたが言及した2つのデータストアのいずれかを使用していないなら、私に知らせてください。

+0

アドバイスをいただきありがとうございます。私はHerokuを使っているので、私はpostgresを使用します。では、上記の関数で取得したJavaScriptオブジェクトをどのように渡しますか?変数名は? – user3318660

+0

あなたはそれをルートに掲示し、問題のオブジェクトを見つけてその属性を更新するコントローラアクションを設定する必要があります。 –

+0

あなたはJavascriptでしかできません。 –

関連する問題