我是初学者,现在已经学习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指南并反复搜索但找不到任何告诉我当前语法错误的内容。有任何想法吗?
答案 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