![](/img/trans.png)
[英]Ruby on Rails syntax error, unexpected '\n', expecting &. or :: or '[' or '.'
[英]ruby on rails 5 lambda syntax error, unexpected =>, expecting ')'
我有一个迁移文件create_subject
(其代码如下), Subject
类包含使用lambda语法的范围。 当我调用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
控制台错误日志
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}%"]) }
调用方法时,请勿在打开括号之前放置空格。 应该是这样
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
如果要将查询放入管道|query|
然后使用:
scope :search,lambda{|query| where(["name LIKE ?", "%#{query}%"]) }
代替
scope :search, ->(query) { where(["name LIKE ?", "%#{query}%"]) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.