1

Railsの使用。?を最もよく書き直す方法はcountry_photo

# country.rb
class Country < ActiveRecord::Base
  has_many :zones

  def country_photo
    if !zones.blank? && !zones.first.shops.blank? && !zones.first.shops.first.photos.blank?
      zones.first.shops.first.photos.first.url(:picture_preview)
    end
  end
end

# zones.rb
class Zone < ActiveRecord::Base
  belongs_to :country
  has_many :zone_shops
  has_many :shops, :through => :zone_shops
end

# zone_shop.rb
class ZoneShop < ActiveRecord::Base
  belongs_to :zone
  belongs_to :shop
end

# shop.rb
class Shop < ActiveRecord::Base  

end
4

2 に答える 2

1

!x.blank?->に注意してくださいx.present?。とにかく、ifsで割り当てを行うことに問題がない場合(Rubyではかなり一般的です)、次のように書くことができます。

def country_photo
  if (zone = zones.first) &&
     (shop = zone.shops.first) &&
     (photo = shop.photos.first) 
    photo.url(:picture_preview)
  end
end

派手な抽象化が好きなら、Ickで次のように書くことができます。

def country_photo
  zones.first.maybe { |zone| zone.shops.first.photos.first.url(:picture_preview) }
end
于 2013-03-25T16:26:13.413 に答える
1

ビューに画像を表示したい場合は、次のようにします。

# show.html.haml
- if @country.photo
  image_tag @country.photo.url(:picture_preview)

# country.rb
class Country < ActiveRecord::Base
  def photo
    zones.first.photo unless zones.blank?
  end
end

# zone.rb
class Zone < ActiveRecord::Base
  def photo
    shops.first.photo unless shops.blank?
  end
end

# shop.rb
class Shop < ActiveRecord::Base
  def photo
    photos.first unless photos.blank?
  end
end
于 2013-03-25T16:53:53.300 に答える