flickrの各画像サイズのurl改

やっぱcontrolleが何を表示するか?を決めて、viewがどう表示するか?を担当した方がいいので
http://shokai.mag.keio.ac.jp/geophoto/photos.kml?lat=35&lon=135&size=thumb
でサイズ指定できるようにしてみた

controllers/photos_controller.rb

  def index
    dist = 5
    dist = params[:dist].to_i if params[:dist] != nil
    lat = params[:lat].to_i if params[:lat] != nil
    lon = params[:lon].to_i if params[:lon] != nil
    if (lat != nil && lon != nil)
      @photos = Photo.find_by_sql ["SELECT * FROM photos WHERE ? < lat AND lat < ? AND ? < lon AND lon < ? LIMIT 500",
                                   lat - dist, lat + dist,
                                   lon - dist, lon + dist]
    else
      @photos = Photo.find(:all, :limit => 50)
    end
    @photos.each{ |photo|
      photo.size = params[:size]
    }
    respond_to do |format|
      format.html
      format.xml  { render :xml => @photos }
      format.js { render :json => @photos }
      format.kml { render :kml => @photos }
    end
  end  
  

views/photos/index.kml.erb

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
	<name>flickr geophoto</name>
    <% for photo in @photos %>
	<Style id="geophoto<%=h photo.photo_id %>">
		<IconStyle>
			<color>ffffffff</color>
			<scale>2</scale>
			<Icon>
				<href><%=h photo.source_url_size %></href>
			</Icon>
			<hotSpot x="20" y="20" xunits="pixels" yunits="pixels"/>
		</IconStyle>
	</Style>
	<Placemark>
		<name><%=h photo.title %></name>
		<LookAt>
			<longitude><%=h photo.lon %></longitude>
			<latitude><%=h photo.lat %></latitude>
			<altitude>0</altitude>
			<range>110000</range>
			<tilt><%= rand(90) %></tilt>
			<heading><%= rand(360) %></heading>
			<altitudeMode>RelativeToGroundAltitudeGE</altitudeMode>
		</LookAt>
		<styleUrl>#geophoto<%=h photo.photo_id %></styleUrl>
		<Point>
			<coordinates><%=h photo.lon %>,<%=h photo.lat %></coordinates>
		</Point>
    </Placemark>
    <% end %>
</Document>
</kml>

models/photo.rb

class Photo < ActiveRecord::Base
  def size=(size = 'medium')
    @disp_size = size
  end
  def source_url_size()
    if @disp_size == 'square'
      return source_url.sub(/\.jpg/, '_s.jpg')
    elsif @disp_size == 'thumb'
      return source_url.sub(/\.jpg/, '_t.jpg')
    elsif @disp_size == 'small'
      return source_url.sub(/\.jpg/, '_m.jpg')
    elsif @disp_size == 'large'
      return source_url.sub(/\.jpg/, '_b.jpg')
    end
    return source_url
  end
end