0

このロジックを削除したい:

Suitcase::Hotel.find(id: hotel.id).images.first.url

ビューから。

https://gist.github.com/2719479

私はモデルホテルを持っていません。この URL は、Suitcase gem を使用して API 経由で取得します。

問題は、 hotelからで@hotels = Suitcase::Hotel.find(location: "%#{headed}%")あり、API が画像を受信するのは、次の場合のみです。Suitcase::Hotel.find(id: hotel.id)

4

3 に答える 3

1

これはうまくいくはずだと思いますが、2番目のオプションについてはわかりません

class Search < ActiveRecord::Base

  attr_accessible :headed, :children, :localization, :arriving_date, :leaving_date, :rooms, :adults
  def hotels
    @hotels ||= find_hotels
  end

private

  def find_hotels
    return unless headed.present?
    @hotels = Suitcase::Hotel.find(location: "%#{headed}%")
    @hotels.each do |hotel|
      def hotel.image_url
        Suitcase::Hotel.find(id: hotel.id).images.first.url
      end
    end
  end
end



# or this, but I'm not sure if this works

@hotels.each do |hotel|
  image_url =  Suitcase::Hotel.find(id: hotel.id).images.first.url
  def hotel.image_url
    image_url
  end
end
于 2012-05-17T16:18:42.467 に答える
1

うまくいけば、ホテルのインスタンスでもうまくいくSuitcase::Hotel.find(id: hotel.id).images.first.urlと思います。hotel.images.first.urlhotel

于 2012-05-17T15:38:57.387 に答える
1

追加中:

@hotel = Suitcase::Hotel.find(id: hotel.id)

アクションが#showうまくいかない?

編集:
その場合、ヘルパーを作成します:

def hotel_image_url(hotel)
  Suitcase::Hotel.find(id: hotel.id).images.first.url
end

しかし、ここでわかるように、コントローラーで簡単に書くことができます:

@hotels_data = Suitcase::Hotel.find(ids: @hotels.map(&:id))

または、よりエレガントにするために、モデルに追加します(またはデコレータを作成します(より良いオプションです)):

def photo
  Suitcase::Hotel.find(id: self.id).images.first.url
end
于 2012-05-17T15:36:59.017 に答える