2017-05-21 67 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}%"]) } 
相关问题