0
  • ルビー 1.9.2p290
  • レール3.1.1

私はこれらのモデルを持っています:

class Recipe < ActiveRecord::Base
 belongs_to :festivity 
end

class Festivity < ActiveRecord::Base
 has_many :recipes 
end

「レシピ」テーブルに次のフィールドがあります。

festivity_id

「festivities」テーブルの次の日時フィールド:

starts_at
ends_at

お祭りの日付に基づいてコンテンツを表示するにはどうすればよいですか?

私はこの静的な方法で考え始めました:

class PagesController < ApplicationController
 def home
  @recipes_by_festivities = Recipe.where(:festivity_id => 4).all(:order => 'RAND()', :limit => 8)
 end
end

例: クリスマス期間 (ほぼすべての 12 月) では、festivity_id = 1 のレシピ リストを表示したいと考えています。感謝祭期間では、festivity_id = 4 のレシピのリストだけを表示したいと考えています。

私の言いたいことが分かりますか?そうでない場合はお知らせください。

解決

@current_festivity = Festivity.find(:last, :conditions => ["? between starts_at AND ends_at", Time.utc(0,Time.now.month,Time.now.day,0,0,0)])

@recipes_by_festivities = Recipe.where(:festivity_id => @current_festivity).all(:order => 'RAND()', :limit => 8)
4

3 に答える 3

1

私なら、祝祭テーブルに「名前」フィールドを作成し、休日の宝石を使用して、特定の日付に休日があるかどうかを判断します。

Holdays.on(Date.today)

ハッシュのリストを返します。各ハッシュには名前キーがあります。次に、それを使用して正しい Festivity オブジェクトを検索し、current_festival = Festivies.where(:name => Holdays.on(Date.today)[0][:name])そこからレシピを取得できます。current_festival.recipes

于 2012-04-24T16:12:39.407 に答える
0

お祭りごとにレシピを見つけたいので、これを行うことができます:

def home
  festivity_today = some_custom_festivity_lookup(Time.now)
  if !festivity_today.nil?
    @recipes = Recipe.where(festivity_id: festivity_today.id).limit(8)
  else
    @recipes = Recipe.limit(8)
  end
end
于 2012-04-24T04:21:50.383 に答える
0

これは、同じ年 (0) を想定starts_atends_atて保存されますが、期間が 2 年の途中 (クリスマスの時期など) の場合を除きます。その場合、ends_at年は 1 でなければなりません。

Festivity.create(name: 'Christmas time', starts_at: Time.utc(0,12,25,0,0,0), ends_at: Time.utc(1,1,6,23,59,59))
Festivity.create(name: 'Ferragosto', starts_at: Time.utc(0,8,15,0,0,0), ends_at: Time.utc(0,8,15,23,59,59))

Recipe.create(festivity: Festivity.find_by_name('Periodo natalizio'))
Recipe.create(festivity: Festivity.find_by_name('Ferragosto'))

# Searching for festivities today
Recipe.includes(:festivity).where(['? BETWEEN festivities.starts_at AND festivities.ends_at', Time.utc(0,Time.now.month,Time.now.day,12,0,0)]).all
# Searching for festivities on 15 August (in Italy there is a festivity that is called Ferragosto)
Recipe.includes(:festivity).where(['? BETWEEN festivities.starts_at AND festivities.ends_at', Time.utc(0,8,15,12,0,0)]).all
# Searching for festivities on 28 December
Recipe.includes(:festivity).where(['? BETWEEN festivities.starts_at AND festivities.ends_at', Time.utc(0,12,28,12,0,0)]).all

そして、これは関数の可能な実装です:

def recipes_on(day, month)
  Recipe.includes(:festivity).where(['? BETWEEN festivities.starts_at AND festivities.ends_at', Time.utc(0,month,day,12,0,0)]).all
end
于 2012-04-24T16:47:20.763 に答える