我是一个初学者,并且已经学习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指南》并进行了反复搜索,但找不到任何可以告诉我当前语法错误的信息。有任何想法吗?
问题在于您如何定义lambda。在您刚开始学习Ruby&Rails时,我建议您阅读本文以了解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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句