0

我是 ruby​​ on rails 的新手,还不能真正编写方法....

上传不包含 exif 数据的图像时出现错误。

我需要这种方法来允许 imgfile 和 imgfile.nil。如果 imfile.nil,我将如何定义默认值或忽略此代码?

# Image geolocation
def get_image_loc
imgfile = EXIFR::JPEG.new(image.queued_for_write[:original].path)
return unless imgfile

lat = imgfile.exif[0].gps_latitude[0].to_f + (imgfile.exif[0].gps_latitude[1].to_f / 60) + (imgfile.exif[0].gps_latitude[2].to_f / 3600)
lng = imgfile.exif[0].gps_longitude[0].to_f + (imgfile.exif[0].gps_longitude[1].to_f / 60) + (imgfile.exif[0].gps_longitude[2].to_f / 3600)

lat = lat * -1 if imgfile.exif[0].gps_latitude_ref == "S"      # (N is +, S is -)
lng = lng * -1 if imgfile.exif[0].gps_longitude_ref == "W"   # (W is -, E is +)

self.img_loc_lat  = lat # imgfile.gps_latitude
self.img_loc_lng  = lng # imgfile.gps_longitude
end

end

这是在我的 show.erb 文件中调用此方法的部分

<% unless @pin.img_loc_lat.blank?
            # bespoke code to load a map if the location information is available 
            # Google Static Maps for now
            # Look to upgrade to Google Maps API 3 - there seem to be a few gems available for it
        %>
            <p>&nbsp;<br />
                <img src="http://maps.googleapis.com/maps/api/staticmap?center=<%= @pin.img_loc_lat %>,<%= @pin.img_loc_lng %>&zoom=13&size=600x300&maptype=roadmap&markers=color:green%7Clabel:P%7C<%= @pin.img_loc_lat %>,<%= @pin.img_loc_lng %>&sensor=false">
            </p>
        <% end %>

我的混帐

https://github.com/nathan-wallace/dcphotogrid-app.git

4

2 回答 2

0

您可以将 html 块重写为帮助程序,然后使用 .try() 将其作为方法调用

@instance.try(:method_name)

如果@instance 为空,则不会调用该方法。

于 2014-01-12T20:49:13.873 回答
0

您可以检查 img_loc_lat 是否为零:

<% unless @pin.img_loc_lat.nil? %>

如果有可能img_loc_lat是字符串或 nil,您也可以将其转换为字符串并检查它是否为空:

<% unless @pin.img_loc_lat.to_s.empty? %>
于 2013-04-27T22:06:50.217 回答