簡體   English   中英

為什么我會收到語法錯誤,意外'}',期望帶有范圍的keyword_end?

[英]Why am I getting syntax error, unexpected '}', expecting keyword_end with scope?

我是初學者,現在已經學習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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM