为什么我会收到语法错误,意外'}',期望带有范围的keyword_end?

时间:2014-11-27 03:54:08

标签: ruby-on-rails rspec

我是初学者,现在已经学习Ruby on Rails大约10周了。当我尝试在我的一个模型上运行RSpec测试时,我收到此错误:

rb:4:语法错误,意外'}',期待keyword_end

看起来我的括号已关闭,我已正确结束。

class Item < ActiveRecord::Base
  belongs_to :list

  scope :created_after, -> (7.days.ago) { where("item.created_at > ?", 7.days.ago) }

 end

范围的目的是能够区分超过7天的项目与上周写入的项目。

以下是我的列表模型架构:

  create_table "items", force: true do |t|
    t.string   "body"
    t.integer  "list_id"
    t.boolean  "done",       default: false
    t.datetime "created_at"
    t.datetime "updated_at"
  end`

我查看了Rails指南并反复搜索但找不到任何告诉我当前语法错误的内容。有任何想法吗?

1 个答案:

答案 0 :(得分:3)

问题在于你如何定义你的lambda。刚开始学习Ruby&amp; Rails我建议你阅读this article来了解lambda是什么,它们如何操作以及语法是什么。圆括号中的代码应该是可以传递给lambda的变量名,而不是日期的定义。例如,您的代码:

scope :created_after, -> (7.days.ago) { where("item.created_at > ?", 7.days.ago) }

应该是:

scope :created_after, -> (date) { where("item.created_at > ?", date) }

这样你可以在Items上创建这样的查询:

new_items = Item.created_after(7.days.ago) # or..
newer_items = Item.created_after(3.days.ago) # or...
new_done_items = Item.where(done: true).created_after(7.days.ago) # etc