2012-08-01 3 views
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,<%[email protected]%>" 

지금, 나는 같은 이미지의 결합,하지만 직접 구성 요소 ID 목록에서 작업을 수행해야 쓸 수 있습니다. 구성 요소 ID가 사진에 저장되지 않았기 때문에 사진 모델에서이 코드를 이동해야합니다.

어디서 왔는지에 관계없이 구성 요소 ID의 목록 (배열 또는 컬렉션) 인 매개 변수를 사용하여 동일한 그리기 코드를 호출 할 수 있습니다.

다이어그램이 구성 요소 집합에서 비롯된 것처럼 구성 요소 ... 어딘가에 속해야합니다.

내 다양한 ​​시도에서 나는 undefined method을 ActiveRecord :: Relation 또는 Array로 끝냅니다.

이 코드의 위치와 호출 방법에 대한 내 생각을 명확히하는 데 도움이 될 수 있습니까?

덕분에

답변

0

글쎄, 게시 능력이 다시 강타했습니다.

I는 요소 컬렉션에 대한 새로운 경로에 넣어

: 성분을 그리 모델 제어기

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

및 방법에 일치 정의와

resources :components do 
    collection do 
     get :draw 
    end 
    end 

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

사진 모델에는 구성 요소 목록을 결합한 다음 ca LL 구조 :

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 

그리고 자바 스크립트에서

나는 아직도 어딘가에보기 또는보기 도우미에서 모델의 방법 등을 포함에 대한 의심이

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); 
}) 

호출 할 수 있지만,이 작업을 보인다 !

0

나는 레일에서 나침반 보석 단순히 목적을 봉사 할 것입니다 생각합니다. 나침반 및 CSS 스프라이트는 Rail Casts을 참조하십시오.

+0

감사합니다.하지만 내가 조립 한 이미지는 스프라이트가 아닙니다 (또는 스프라이트 용). 수백 개가 너무 많아서 스프라이트로 적합하지 않을 수도 있습니다. –

관련 문제