2012-01-06 5 views
0

ID를 포함하는 객체를 생성해야하므로 model create 메소드에서 내 모델 (이미지의 URL이있는 문자열)에 속하는 이미지를 만들어야합니다. 문제는이 이미지가 생성 된 개체의 URL을 포함해야하는 QR 코드라는 것입니다.

하지만 주어진 객체에 해당 위치에 ID가 없기 때문에 (물론) URL은 create 메소드에서 알 수 없습니다.

이 아이디어를 해결하는 방법은 무엇입니까?

+0

귀하의 질문이 조금 애매하지만, 당신은 당신의 모델에'after_create' 콜백에서 이미지를 만들 수 없습니다 : 이미지를 설정 after_create 콜백을 사용하여 두 단계로 저장하면 기록이 저장되고 나면 ? – Mischa

+0

@ 좋은 지적이지만, 내 qr-image를 만들기 위해 url-helper 메소드에 액세스 할 수 없습니다. – choise

+0

왜 안되나요? http://stackoverflow.com/questions/341143/can-rails-routing-helpers-i-e-mymodel-pathmodel-be-used-in-models – Mischa

답변

2

UDID/GUID를 생성하기 위해 호출하고 URL http://mysite.com/obj/# (udid}에서 사용)과 같이 URL 내의 비 ID 열을 사용하는 것보다 명백한 방법이 없습니다.

class MyModel < ActiveRecord::Base 

    after_create :set_image 

    def set_image 
    if image_attribute == nil 
     image_attribute = generate_a_qr_code(self) 
     self.save 
    end 
    end 

end 
+0

하지만 내 모델의 url-helpers에 액세스 할 수 없습니까? – choise

+1

'Rails.application.routes.url_helpers'는 모든 _path 및 _url 도우미에 대한 액세스를 허용합니다. –

+0

잘 작동합니다. 감사합니다. 이미지를 지우기 위해'before_destroy' 필터를 사용하면 안되는 것이 있습니까? 내 모델에서이 작업을 수행해도 괜찮습니까? – choise

0

를 사용하여 두 개의 패스 절약 :-)이 기본 키로 자동 증가 열 전통적인 데이터베이스입니다

def create 
    model = Model.new params[:model] 

    if model.save 
    # at this point you have an id 
    model.qr = generate_qr model 
    model.save 

    # proceed as usual 
    end 
end 

. 일부 데이터베이스에서는 개체를 저장하기 전에 새 값을 얻기 위해 쿼리 할 수있는 시퀀스를 사용하여 키가 생성됩니다. 일부 데이터베이스 (MongoDB)에서는 클라이언트에서 키를 완전히 생성 할 수 있습니다.

+0

괜찮습니까? 이렇게 이상한 패턴이 아니십니까? 테스트를 위해 이것을 수행하고 조금 이상하다고 생각했습니다. – choise

+1

이것이 원하는 경우 'after_create' 콜백을 사용하는 것이 좋습니다. – Mischa

+0

이렇게하면 좋겠습니다. 나는 자주 보지 않습니다. :-) –