2012-01-06 16 views
5

Używam Dragonfly do obsługi obrazów w aplikacji Rails 3.1. Zmagam się z przypisywaniem obrazów do modelu za pomocą adresu URL.Przypisywanie obrazu z adresu URL za pomocą Dragonfly

mam to dobrze działa w formie:

<%= form_for [@word, @game, @picture], :html => {:multipart => true} do |f| %> 
    <%= f.hidden_field :retained_image %> 
    <p> 
    <%= f.label :image, "upload pic" %><br /> 
    <%= f.file_field :image %> 
    </p> 
    <p> 
    <%= f.label :image_url, "or pic URL" %><br /> 
    <%= f.text_field :image_url %> 
    </p> 
    <p> 
    <% if @picture.image_uid? %> 
    <label>Remove Picture?</label> 
    <%= f.check_box :remove_image %> 
    <% end %> 
    </p> 
    <p><%= f.submit %></p> 
<% end %> 

stany dokumentacja Ważki:

Dragonfly dostarcza akcesor do przypisywania bezpośrednio z URL:

@album.cover_image_url = 'http://some.url/file.jpg' 

Ale jeszcze kiedy spróbuj w mojej konsoli:

=> #<Picture id: nil, game_id: nil, user_id: nil, created_at: nil, updated_at: nil, image_uid: nil> 
ruby-1.9.2-p290 > picture.image_url = "http://i.imgur.com/QQiMz.jpg" 
=> "http://i.imgur.com/QQiMz.jpg" 
ruby-1.9.2-p290 > picture 
=> #<Picture id: nil, game_id: nil, user_id: nil, created_at: nil, updated_at: nil, image_uid: nil> 

Wygląda na to, że zwracam ciąg adresu URL, który próbuję przekazać Dragonfly, nie otwierając ani nie wyciągając obrazu, jak w formularzu.

Czy jest coś, czego mi brakuje, próbując przypisać obraz oparty na adresie URL? Wygląda na to, że powinno być całkiem proste, ale nie mogę sprawić, żeby cokolwiek działało w konsoli z rubinem.

Odpowiedz

8

Jesteś pewien, że to nie działa? Co się dzieje po wpisaniu (po przypisaniu z adresu URL)

picture.image 

lub

picture.image.size 

na przykład?

Nie ustawi on parametru image_uid, dopóki nie zostanie zapisany, ale dostępne jest zdjęcie.

Rzeczywiste pobieranie z adresu URL odbywa się leniwie, tj. Tylko w razie potrzeby. Nazywanie go "rozmiarem" powyżej wyzwala go na przykład.

+0

Po pierwsze, dziękuję Znakowi za niesamowity klejnot. Po drugie, wow, czuję się głupio. Robiłem trochę pobierania i coś w stylu: picture.save if picture.image_uid # oczywiście to nie zadziała i nie przetestowałem wystarczająco dokładnie. Dzięki za tonę, działa świetnie. – Kombo

2

Miałem podobny problem, gdy poprzez formularz: image_url nie tworzył: image_uid przy zapisie. Wszystko działało dobrze na konsoli szyn.

Działa z parametrem: image_url po dodaniu go jako parametru w kontrolerze. Pomyślałem: obraz poradziłby sobie: image_url przy zapisie, ale zamiast tego musiałem jawnie przekazać: image_url jako parametr do zapisu.

+0

Może powinieneś dodać kod do zilustrowania swojego rozwiązania. –

+0

Z pewnością jest podróżnikiem w czasie i oznacza dodanie: image_url do 'params.require (: my_model) .permit (: foo,: bar,: image_url)' in rails 4. –

Powiązane problemy