2014-07-07 46 views
0

签名的垫的转换JSON到回形针图片Rails的Before_save没有运行轨道4

嗨得到这个导轨4的应用程序,你可以SIG中的形式,节省了IMG。即时通讯使用signaturePad.js这个Im后面tutorial转换成img。 我得到了SIG形式的工作和它过去的数据,但得到的错误与回形针

Paperclip::AdapterRegistry::NoHandlerError 

No handler found for "[{\"lx\":157,\"ly\":81,\"mx\":157,\"my\":80},{\"lx\":157,\"ly\":79,\"mx\":157,\"my\":81},{\"lx\":158,\"ly\":79,\"mx\":157,\"my\":79},{\"lx\":158,\"ly\":77,\"mx\":158,\"my\":79},{\"lx\":159,\"ly\":76,\"mx\":158,\"my\":77},{\"lx\":164,\"ly\":70,\"mx\":159,\"my\":76},{\"lx\":169,\"ly\":66,\"mx\":164,\"my\":70},{\"lx\":171,\"ly\":64,\"mx\":169,\"my\":66},{\"lx\":171,\"ly\":63,\"mx\":171,\"my\":64},{\"lx\":171,\"ly\":64,\"mx\":171,\"my\":63}, 

出于某种原因没有运行回调,使PNG 。 我有谷歌这几个月,没有任何帮助。谢谢 这到目前为止是一个很好的例子。

SignaturePad.rb

before_save :generate_image 
    has_attached_file :image # options ... 

      private 

    def signature_present 
    if signature.size <= 2 
     errors.add(:signature, :blank) 
    end 
    end 

    def generate_image 
    instructions = JSON.parse(signature).map { |h| "line #{h['mx'].to_i},#{h['my'].to_i} #{h['lx'].to_i},#{h['ly'].to_i}" } * ' ' 
    image = StringIO.new 
    Open3.popen3("convert -size #{WIDTH}x#{HEIGHT} xc:transparent -stroke blue -draw @- PNG:-") do |input, output, error| 
     input.puts instructions 
     input.close 
     image.puts(output.read) 
    end 
    self.image = image 
    end 
end 

我看来

<%= form_tag({:controller => "sigPad", :action => "signature", }, :method => "post", :class => "sigPad") do %> 
    <a href="#draw-it">Firma</a> 
<a href="#clear">Borrar</a> 
    <div class="sig sigWrapper"> 
    <div class="typed"></div> 
    <canvas class="pad" width="390" height="110"></canvas> 
    <input id:"signature" type="hidden" name="signature" class="output" value="output"> 
    </div> 
<%= submit_tag("Guardar") %> 
<%end%> 

的js

回答

1

回形针可能正试图处理它before_save被调用之前。可能能够使它与before_validate一起工作。否则,您可以将该代码重构为单独的类,并在将参数从请求传递到模型时在控制器中执行。

+0

before_validation它不工作。你能给我举一个如何重构控制器的例子。如果你可以的话。我在这个盲人,可以得到它的工作。谢谢 – Frank004

+0

我在想你可能不得不改变方法,但也许不是。尝试在您的控制器中创建如下所示的操作:http://pastie.org/9396355 – agmcleod