2017-05-21 70 views
-1

我有一個遷移文件create_subject(其代碼如下),Subject類包含使用lambda語法的作用域。當我撥打Subject.visible時,出現語法錯誤。ruby​​ on rails 5 lambda語法錯誤,意外=>,期待')'

class CreateSubjects < ActiveRecord::Migration[5.0] 
    def up 
    create_table :subjects do |t| 
     t.string "name" 
     t.integer "position" 
     t.boolean "visible", :default=>false 

     t.timestamps 
    end 
    end 

    def down 
    drop_table :subjects 
    end 
end 

This is my Subject class

控制檯錯誤日誌

irb(main):003:0> Subject.visible 
SyntaxError: C:/Users/SS/Sites/simple_cms/app/models/subject.rb:3: syntax error, unexpected =>, expecting ')' 
scope :visible, -> { where (:visible => true) } 
           ^
C:/Users/SS/Sites/simple_cms/app/models/subject.rb:4: syntax error, unexpected =>, expecting ')' 
scope :invisible, -> { where (:visible => false) } 
            ^
C:/Users/SS/Sites/simple_cms/app/models/subject.rb:7: syntax error, unexpected '|' 
scope :search, -> {|query| where (["name LIKE ?", "%#{query}%"]) } 
       ^
C:/Users/SS/Sites/simple_cms/app/models/subject.rb:7: syntax error, unexpected (arg, expecting keyword_do or '{' or '(' 
scope :search, -> {|query| where (["name LIKE ?", "%#{query}%"]) } 

回答

3

不要調用方法時開括號之前把空間。它應該是這樣的

class Subject < ApplicationRecord 
    scope :visible, -> { where(:visible => true) } 
    scope :invisible, -> { where(:visible => false) } 
    scope :sorted, -> { order("position ASC") } 
    scope :search, ->(query) { where(["name LIKE ?", "%#{query}%"]) } 
    # and so on ... 
end 
+0

(謝謝你,爲回答貌似最。的錯誤是固定的): irb(main):001:0> Subject.visible SyntaxError:C:/Users/SS/Sites/simple_cms/app/models/subject.rb:7:syntax erro r,意想不到的'|' 範圍:搜索, - > {| query |在哪裏([「名稱LIKE?」,「%#{查詢}%」])} –

+0

@SafiUllah我更新了這個例子的答案 –

+0

我真的不能多謝你,先生@Michal。我覺得我失去了學習這門語言的機會。 非常感謝你...... –

0

如果你打算把在管|query|查詢然後使用:代替

scope :search,lambda{|query| where(["name LIKE ?", "%#{query}%"]) } 

scope :search, ->(query) { where(["name LIKE ?", "%#{query}%"]) } 
相關問題