我有一个subject模型,其属性包括start_dateend_date以及completed boolean属性。

subject.rb ,我有一种方法可以查找给定subject剩余多少周的时间:

  def weeks_left
    time = (self.end_date.to_time - Date.today.to_time).round/1.week
    if time < 0
      "completed"
    elsif time < 1
      "less than 1 week"
    elsif time == 1
      "1 week"
    else
      "#{time} weeks" 
    end
  end

我想在self.weeks_left == "completed"勾选completed属性,最好的方法似乎是回叫,但我不确定使用after_find-总的来说似乎太多了查询,确实太大的疼痛(尤其是阅读后这个 ) -但在这种情况下,一旦一个主题是完整的,它不会改变,所以好像没用,检查其状态不止一次-什么是对的最佳途径处理这个(事情?

===============>>#1 票数:1 已采纳

您为什么不为此做一个范围?

scope :completed, ->{where("end_date <= ?", Time.now)}

和方法

def completed?
  self.weeks_left == "completed"
end

===============>>#2 票数:0

看起来您需要ActiveRecord :: Callbacks。 您可以在此处或在导轨上查看更多信息

before_save :update_completed

def update_completed
  if (end_date_changed?)
    time = (self.end_date.to_time - Date.today.to_time).round/1.week
    self.complete = time < 0
  end
end

这样,只要end_date更改,它就会更新complete标志,并且始终保持同步。

但是,由于这是一个计算所得的值,因此您也不能将其存储为属性,而只是定义一种获取它的方法

def complete
  time = (self.end_date.to_time - Date.today.to_time).round/1.week
  return time < 0
end

  ask by dax translate from so

未解决问题?本站智能推荐:

2回复

rails 3在之前/之后保存一个相关的模型属性

我有一个基本的应用程序,它允许user1创建一个可兑换的代码。 user1与他的朋友共享此代码,user2、3、4兑换该代码。 在每次兑换时,我需要增加user1的points属性。 用户首次赎回代码时,它将创建赎回。 由于用户只能兑换一次代码,因此再也无法使用。 另一个用户可以兑
3回复

Ruby on Rails:将模型的对象和属性保存到另一个表

我有2张桌子。 例如,“水果”和“食物”为带有相应模型的水果表创建新条目时,如何将其中一个的对象和属性保存到另一个名为“全部”的表中? 或更简单:保存新条目时如何更新另一个表? 我需要类似“更新值,其中id = x”的内容
1回复

Rails模型回调

如何根据模型是在创建还是更新记录来在模型内做些什么? 我敢肯定这确实很简单,但是我似乎无法弄清楚。 这些是使用回形针更新或创建附件的不同样式。
1回复

Ruby on Rails 3-从另一个模型创建一个模型的实例

我有以下问题,但首先我会做一些假设 该示例只是为了轻松说明我的问题 表格型号无关 我有两个表(模型)的用户一个电子邮件 用户数 ID 名称 电子邮件 电邮 ID 帐户 因此,该想法是每次创建用户时,我都想
2回复

Rails模型“before_filter”?

我知道before_filter只适用于Rails中的控制器,但是对于模型我想要这样的东西:每次调用模型中的方法时,我都想运行一个方法来确定被调用的方法是否应该运行。 从概念上讲,这样的事情: 因此,当我调用@ website.method1时,它将首先调用confirm_compan
3回复

在哪里放置我在几个模型中使用的自定义回调

假设我有两个具有相同回调的模型: 我在哪里可以放置共享回调代码? 谢谢
2回复

为什么我的Rails回调被调用两次?

我有一个after_commit ::在我的模型中创建回调,并且它被调用两次。 此回调中有六种方法,其中一些方法是插入到我的数据库中。 我担心事情会变慢,我的数据库会变得太快。 奇怪的是我的before_create after_create回调只执行一次。 可能是什么导致了这个?
1回复

回调Rails 3中的Update属性

从这个问题开始 ,我花了整整一天的时间试图将累积的运行销售总额添加到我的销售表中。 (对我而言)有点棘手,因为我想要isbn_id相同的销售总额,并在该集合内记录channel_id相同的位置-按invoice_date排名。 这就是全部,这样我就可以计算出特定销量单位的特许权使用费。
2回复

如何将数据从Google Drive API传递到Rails App模型中?

有一个简单的Rails应用程序表单视图。 用户通过“文件选择器功能”(例如Google Picker)从其API帐户(例如Google Drive帐户)中选择一个文件,然后API通过javascript回调函数将数据(URL,缩略图,...)发送回去(请参阅下面的JS代码)。 您如何通过
2回复

RAILS:嵌套模型和回调中nil:NilClass的未定义方法`profile'

这是一个实际的工作示例,在上一篇文章中,我详细解释了两个成员的请求,并对其进行了简化。 我提取并重写了以下代码来解决持久性问题:nil:NilChass的未定义方法“ profile”将近两天。 我使用gem“ faker”和SQLite Database Browser,省略了控制器和