[英]ruby on rails 5 lambda syntax error, unexpected =>, expecting ')'
I have a migration file create_subject
(code of which is below), a Subject
class contains scopes using lambda syntax. 我有一个迁移文件
create_subject
(其代码如下), Subject
类包含使用lambda语法的范围。 When I call Subject.visible
, I get syntax errors. 当我调用
Subject.visible
,出现语法错误。
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 这是我的学科课
Console error log 控制台错误日志
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}%"]) }
Do not put space before opening parenthesis when calling methods. 调用方法时,请勿在打开括号之前放置空格。 It should be like this
应该是这样
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
If you are going to put query in pipes |query|
如果要将查询放入管道
|query|
then use: 然后使用:
scope :search,lambda{|query| where(["name LIKE ?", "%#{query}%"]) }
instead of 代替
scope :search, ->(query) { where(["name LIKE ?", "%#{query}%"]) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.