0

私は自分自身をかなり混乱させました。いくつかの画像を取得して結合し、結合した画像を .png 形式で吐き出すコードがあります。

もともと、このコードはモデルのメソッドであり、使用する画像を示すモデルの関連付けがありました。したがって:

class Component < Refinery::Core::BaseModel  
    drawing_accessor :drawing
  . . .
end

class Photo < Refinery::Core::BaseModel
  has_and_belongs_to_many :components
  has_many :drawings, :through=>:components

  def diagram
    . . . .
    Base64.encode64(png.to_blob)    #spit out the png as a base64 encoded string
  end
end

そして、私が書くことができるビューで

  <img src="data:image/png;base64,<%=@photo.diagram%>"

ここで、同じように画像を結合する必要がありますが、コンポーネント ID のリストから直接使用する必要があります。コンポーネント ID が写真に保存されていない (保存されていない可能性がある) ため、このコードを写真モデルから移動する必要があります。

コンポーネント ID のリスト (配列またはコレクション) であるパラメーターを使用して、それらがどこから来たかに関係なく、同じ描画コードを呼び出せるようにしたいと考えています。

ダイアグラムは一連のコンポーネントから作成されているため、コンポーネントに属しているはずです...どこかに。

私のさまざまな試み undefined methodで、ActiveRecord::Relation、または配列に行き着きました。

このコードがどこに属し、どのように呼び出すかについての私の考えを明確にするのを手伝ってもらえますか?

ありがとう

4

2 に答える 2

0

さて、投稿の力が再びヒットしました。

コンポーネントコレクションの新しいルートを追加しました。

  resources :components do
    collection do
      get :draw
    end
  end

コントローラで定義が一致している

def draw                 
  send_data Component.construct(params[:list],params[:width], params[:height]), :type => 'image/png', :disposition => 'inline'
end  

およびコンポーネントを描画するためのモデル上のメソッド

  def self.construct(component_list, width, height)
  . . . 
    Base64.encode64(png.to_blob)    #spit out the png as a base64 encoded string
  end 

Photoモデルには、コンポーネントリストをまとめて、constructを呼び出すメソッドが含まれています。

  def diagram
    component_list = []
    # construct the list of ids in the right order (bottom to top, or base to capital)
    ....
    Component.construct(component_list, self.image.width, self.image.height)
  end

そしてjavascriptから私は呼び出すことができます

var component_list = $("input:checked").map(function(){return this.value}).get();
. . . 
$.get(url,{list:component_list, width:width, height:height}, function(data) {
  $('img.drawing').attr("src","data:image/png;base64," + data);
})

ビューやビューヘルパーのどこかにではなく、モデルにメソッドを含めることについてはまだ疑問がありますが、これは機能しているようです。

于 2012-08-02T05:46:22.317 に答える
0

レールのコンパス宝石は単にあなたの目的に役立つと思います。コンパスと CSS スプライトについてはRail Castsを参照してください。

于 2012-08-01T06:58:06.977 に答える