0

JavaScript 変数を Rails Controllerに渡したいと考えています。興味深いのは、変数が の内部Canmanで生成され、外部では (まだ) 使用できないことです。

これはおそらく単なる JavaScript であり、必ずしも Canman とは関係ありません。しかし、ここで何が起こっているのかわかりません。

私が従っているアプローチ(ただし、より良い方法があれば完全にオープンです)は、コントローラーからパラメーターを介してデータにアクセスするためだけに、隠しフィールドにjQueryを入力することです。

可能であれば (そしてこれが良い方法である場合)、フォームを避けて、クリック時に JavaScript を呼び出して、その変数をコントローラーに渡したいと思います。


意見

= form_for @post do |form|
  = form.hidden_field :base64
  = form.submit


JavaScript

$('form').submit(function(event){

  Caman('#canvas', img, function() {
    var imageBase64 = this.toBase64();
    alert(imageBase64); // works fine
    $('#post_base64').val(imageBase64);
  });

  alert(imageBase64); // nothing
});


投稿コントローラー

def update
  @post = Post.find(params[:id])
  raise '¯\_(ツ)_/¯'
  ...
end


post_params

=> {"base64"=>""}

また、オプションとして AJAX リクエストを行うこともできると読みました。ただし、それをどのように進めるかはまだわかりません。

ある時点で、hidden_​​field の代わりに text_area を試してみました。text_area には適切なデータが取り込まれました。ただし、params はデータを取得しませんでした。ブラウザのボタンから戻った場合、データは text_area にあり、送信をもう一度クリックすると、期待どおりにパラメータが入力されます。

ここに画像の説明を入力

前もって感謝します!

4

1 に答える 1

0

簡単な答え: Ajax .

目標は、変数の値 (base64 イメージ) を Rails コントローラーに送信し、そこに到達したら、Ruby だけで作業を続けることでした。

最後に、クライアント (ブラウザーからの画像) からサーバー (Rails コントローラー) にデータを送信する単純な Ajax 関数を作成しました。params

save_canvas.js

$(document).on('click', '.save_canvas', function() {
  event.preventDefault()
  var base64Data = canvas.toDataURL('png')

  $.ajax({
    type:    "POST",
    url:     "http://localhost:3000/pictures/",
    data:    { image: base64Data },
    success: function(post){ console.log('success') },
    error:   function(post){ console.log(this) }
  })
})

pictures_controller.rb

  def create
    @picture = Picture.new(image: params[:image])
    @picture.save
    redirect_to @picture
  end

ここでこれを達成するためのサポートを得ました

于 2016-04-14T07:26:24.753 に答える