如何创建此模型元方法?

时间:2015-08-08 16:50:17

标签: ruby-on-rails ruby ruby-on-rails-4 methods

我曾经使用过以下模型方法,我使用if @invitation.invite_expired? ...调用了

def invite_expired?
  cycle_invite_sent_at < 2.hours.ago
end

因为我想将此方法用于多个过期检查,所以我尝试按如下方式创建“meta”方法:

def expired?(what)
  check = send("#{what}_invite_sent_at")
  check < 2.hours.ago     #Also tried "self.check" but that made no difference.
end

我使用if @invitation.expired?(cycle) ...调用此方法。但是,现在各种测试都失败了:

NameError: undefined local variable or method `cycle' for #<InvitationsController:0x0000000a5e8d50>

有谁看到我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

您应该像以下一样使用它:

if @invitation.expired?("cycle")
  # some code here.

我假设这是因为在控制器代码中引发了undefined local variable or method 'cycle',当您尝试使用普通cycle而不是字符串"cycle"时,它会发生。