Kolejnice Částečné vykreslování obrázků

hlasů
1

Vstávám rychlosti na kolejích a narazil na podivnou problém. Jsem vykreslování některé snímky z databáze (image modelů spojená s jiným modelem, rostliny). Mám nějaké problémy při pokusu o to přes částečný. Mám show.html.erb

 <fieldset class=fieldset>
      <legend>Images</legend>
      <%=  unless @plant.images.blank? then
                for image in @plant.images
                     debugger 
                     render :partial => 'show_image', :object => image 
                end
           else
                This plant has no images to display.
           end
      %>
 </fieldset>

A částečné _show_image.html.erb:

 <div class=image_container>
      <% debugger %>
      <img src=<%= url_for(:action => 'picture', :id => object.id) %>/> 
      <p class='image_caption'><%= object.comment %></p> 
 </div>

Je-li to vyjádřil to jen vykreslí „#“ pro každý obrázek, spíše než skutečný obraz. Zdá se, že právě vykreslování objektu jako řetězec, jak ve zdroji I získat:

 <fieldset class=fieldset>
      <legend>Images</legend>
      #<Image:0x242c910>
 </fieldset>

Při jízdě přes ladicí lokálně:

 /Users/*****/dev/plantmanager/app/views/plants/show.html.erb:54
 debugger
 (rdb:241) image
 #<Image id: 40, comment: Test, name: Ixia.gif, content_type: image/gif, data: GIF89a2\0002\000####$\205\233\tI\250\x\224\b?\206\031d|ju####\v\031###\247\bI\257G\222\232\222\227\263\262..., plant_id: 55, thumbnail: nil> 
 (rdb:221) @plant
 #<Plant id: 55, name: Test, description: Test, created_at: 2009-05-07 07:19:44, updated_at: 2009-05-07 07:19:44, planted: 2009-05-07 00:00:00, sprouted: 2009-05-15 00:00:00, plant_type_id: 1, finished: 2009-05-27 00:00:00>
 (rdb:221) @plant.images
 [#<Image id: 40, comment: Test, name: Ixia.gif, content_type: image/gif, data: GIF89a2\0002\000####$\205\233\tI\250\x\224\b?\206\031d|ju####\v\031###\247\bI\257G\222\232\222\227\263\262..., plant_id: 55, thumbnail: nil>]
 (rdb:221) continue
 /Users/*****/dev/plantmanager/app/views/plants/_show_image.html.erb:2
 <% debugger %>
 (rdb:221) object
 #<Image id: 40, comment: Test, name: Ixia.gif, content_type: image/gif, data: GIF89a2\0002\000####$\205\233\tI\250\x\224\b?\206\031d|ju####\v\031###\247\bI\257G\222\232\222\227\263\262..., plant_id: 55, thumbnail: nil>
 (rdb:221) object.id
 40
 (rdb:221) object.comment
 Test
 (rdb:221) continue

Zde jsou mé modely [přestřihl trochu]:

class Plant < ActiveRecord::Base
     has_many :images

     validates_presence_of :name
     validates_presence_of :plant_type_id
     validates_associated :images


     after_update :save_images

     def image_attributes=(image_attributes)
          image_attributes.each do |attributes|
               # TODO: Probably handle validation in the image model?
               if attributes[:id].blank?
                   unless attributes[:uploaded_picture].blank?
                        tmpImg = images.build()
                        tmpImg.uploaded_picture=attributes[:uploaded_picture]
                        tmpImg.comment = attributes[:comment] 
                   end
               else
                   img = images.detect { |i| i.id == attributes[:id].to_i }
                   img.attributes = attributes
                end
           end
      end


      def save_images
           images.each do |i|
                if i.should_destroy?
                     i.destroy
                else
                     i.save(false)
                end
           end 
      end
 end

 class Image < ActiveRecord::Base 
      validates_format_of :content_type, 
                          :with => /^image/, 
                          :message => --- you can only upload pictures 

      attr_accessor :should_destroy

      def should_destroy?
           should_destroy.to_i == 1
      end

      def uploaded_picture=(picture_field)
           self.name = base_part_of(picture_field.original_filename) 
           self.content_type = picture_field.content_type.chomp 
           self.data = picture_field.read
           #image = MiniMagick::Image.from_blob self.data
           #self.thumbnail = resize_and_crop(image, 100).to_blob
      end 

      def base_part_of(file_name) 
           File.basename(file_name).gsub(/[^\w._-]/, '') 
      end
 end 
Položena 07/05/2009 v 15:29
uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
4

Zkuste místo toho:

<%  unless @plant.images.blank?
                for image in @plant.images
%>
                     <%= render :partial => 'show_image', :object => image %>
                <% end
           else %>
                This plant has no images to display.
           <% end %>

Mrzí formátování, ale dostanete nápad.

Odpovězeno 07/05/2009 v 15:40
zdroj uživatelem

hlasů
1

Stavět metodu pro pic v modelu Image

class Image < ActiveRecord::Base
   belongs_to :plant
   validates_presence_of :uploaded_picture
   ...
end

V ovladači rostlin

def plant_pic
  img = Image.find(params[:id])      
  # THE NEXT LINE IS THE ONE I THINK YOU ARE MISSING:
  send_data img.uploaded_picture, :filename =>"plant#{img.plant_id}_#{img.id.to_s}+'.jpg', 
                                  :type => 'image/jpeg', 
                                  :disposition => 'inline'
end
...

A pak ve svých závodech zobrazení:

<fieldset class="fieldset">
  <legend>Images</legend>
  <% if plant.images.blank? -%>
  <p>This plant has no images to display.</p>
  <% else %>
    <%= @plant.images.each do |image| %>
      <div class="img_container"> 
      <img src="<%= url_for(:action => 'plant_pic', :id => image.id) %>"/>
      </div>
    <% end -%>
  <% end -%>
</fieldset>

Možná budete chtít k zakódování / dekódování binární pole uploaded_picture someway (já používám Base64.encode a Base64.decode) do svých obrazů řadič, ale to je jiný problém.

Doufám, že vám pomůže

Odpovězeno 07/05/2009 v 18:23
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more