首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据节假日显示内容

根据节假日显示内容
EN

Stack Overflow用户
提问于 2012-04-23 22:35:17
回答 3查看 749关注 0票数 0
  • ruby 1.9.2p290
  • rails 3.1.1

我有这样的模型:

代码语言:javascript
复制
class Recipe < ActiveRecord::Base
 belongs_to :festivity 
end

class Festivity < ActiveRecord::Base
 has_many :recipes 
end

我在“食谱”表中有以下字段:

代码语言:javascript
复制
festivity_id

以及“庆祝活动”表中的下列日期时间字段:

代码语言:javascript
复制
starts_at
ends_at

如何根据节日日期显示内容?

我开始用这种静态的方式思考:

代码语言:javascript
复制
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的菜谱列表。

我说清楚了吗?如果我不告诉我。

溶液

代码语言:javascript
复制
@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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-24 16:47:20

这假设starts_atends_at与相同的年份(0)一起保存,但如果期间为两年(例如圣诞节时间),则除外:在这种情况下,ends_at年份必须是1。

代码语言:javascript
复制
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

这是一种可能的功能实现:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2012-04-24 16:12:39

我要做的是在“节日”表中创建一个“名称”字段,然后使用节假日宝石来确定某个特定日期是否有假日。

代码语言:javascript
复制
Holdays.on(Date.today)

它将返回一个散列列表:每个散列都有一个名称键。然后您可以使用它来查找正确的Festivity对象current_festival = Festivies.where(:name => Holdays.on(Date.today)[0][:name]),然后从那里得到菜谱:current_festival.recipes

票数 1
EN

Stack Overflow用户

发布于 2012-04-24 04:21:50

因为你想通过庆祝活动找到食谱,所以你可以这样做:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10289254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档