根据Rails中的日期设置布尔属性

时间:2015-03-11 18:11:04

标签: ruby-on-rails ruby angularjs postgresql

在我的应用中,我试图区分活跃用户和那些已经毕业的用户#34;可以这么说。我正在运行Rails 4,前端与AngularJS绑在一起SPA。

用户在数据库中有一个布尔active属性(Postgres),如果选择的用户end_year等于,则我试图自动将其设置为true或大于当年(例如2015年,2016年,2017年等)。一旦用户end_year小于当前年份(例如2013年,2014年),我希望该布尔值自动切换为false。

不确定我将如何解决这个问题,或者是否有更好的方法来实现区分活跃和"毕业的最终结果"用户。

例如,在以下代码中,我将返回特定组中的所有用户,无论其状态为活动还是非活动状态。我想要的是返回一个尚未“毕业”的特定群组中的所有用户。

def self.participants_by_group(group_id, max=5)
  User.find_by_sql(['select users.*
    from users, groups
    where users.group_id = groups.id
    and groups.id = ?
    order by name asc limit ?', group_id, max])
end

1 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

class User
  # rest of your code

  def graduated?
    end_year >= Date.today.year
  end
end

u1 = User.new(end_year: 2014)
u1.graduated? # => false

u2 = User.new(end_year: 2016)
u2.graduated? # => true

要查询活动 User,您可以使用以下内容:

User.where("end_year >= :current_year", {current_year: Date.today.year})

find_by_sql的更新将是:

def self.active_participants_by_group(group_id, max=5)
  User.find_by_sql(['select users.*
    from users, groups
    where users.group_id = groups.id
    and groups.id = ?
    and users.end_year >= ?
    order by name asc limit ?', group_id, Date.today.year, max])
end