J'utilise l'API FileStack et la gemme de sélection de fichier (https://github.com/Ink/filepicker-rails). J'ai un modèle d'attachement qui a un: title en tant que chaîne. Lorsqu'un fichier est téléchargé, l'URL de l'API FilePicker est stockée sous le titre:. Mais la gem possède une méthode onchange qui renvoie une variable d'événement en tant qu'objet JSON contenant des attributs du fichier. J'utilise JavaScript pour accéder à ces attributs, mais je veux trouver un moyen de stocker dans Rails ces attributs, accessibles via JavaScript, dans un modèle afin que je puisse y accéder via le reste de l'application Rails.Rails moyen efficace pour stocker l'objet JavaScript au modèle?
<%= 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>
Mise à jour:
Alors après avoir regardé dans votre solution et googler J'utilise autour ajax pour envoyer les données par des voies au contrôleur. Voici mon Javascript mis à jour ainsi que l'itinéraire et le contrôleur. Lorsque je rends et inspectons la variable d'instance @foo, elle est nulle. Donc mes données ne sont pas transmises correctement. De plus, tout ce processus depuis le lancement de la fonction Javascript jusqu'à l'affichage de l'index est maintenant très très lent. Je pense avoir la bonne idée après avoir vu votre solution et avoir creusé plus mais il me manque quelque chose et/ou trop compliqué. Tout conseil serait très apprécié.
<script>
function onUpload(event) {
var name = event.fpfile.filename;
jQuery.ajax({
data : { data_value: event },
type: 'post',
url: "/attachment/index"
});
}
</script>
Route
post 'attachments/' => 'attachment#index'
Contrôleur
def index
@attachments = Attachment.all
@foo = params[:data_value]
end
View (renvoie nil)
<%= raise @foo.inspect %>
Merci pour le conseil. J'utilise postgres depuis que j'utilise Heroku. Alors, comment je passerais dans l'objet JavaScript que j'obtiens dans ma fonction ci-dessus? Le nom de la variable? – user3318660
Vous devez le publier sur un itinéraire et configurer une action du contrôleur pour trouver l'objet en question et mettre à jour l'attribut. –
Vous ne pouvez pas le faire seulement avec Javascript. –