rails4范围语法错误

时间:2015-12-12 09:59:36

标签: ruby-on-rails ruby

添加active-admin后出现以下错误。

错误:语法错误,意外' |'范围:搜索, - >(sname){|查询| ^

class Category < ActiveRecord::Base
  has_many :softwares
  scope :visible, lambda { where(:visible => true)}
  scope :invisible, lambda { where(:visible => false)}
  scope :sorted, lambda { order("softwares.sname ASC")}
  scope :newest_first, lambda { order("softwares.created_at DESC"  )}
  scope :search, lambda { |query|
    where(["sname LIKE ?","%#{query}%"])
  }
end

**上一个代码**

<!DOCTYPE html>
<html>
  <head>
    <style>
      body {
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
    <webview src="http://www.google.com/"></webview>
  </body>
</html>

1 个答案:

答案 0 :(得分:2)

看起来你对使用lambdas的短语和普通语法感到困惑。

长篇:

lambda { |argument| ... }

语法短:

->(argument) { ... }

在范围内,当不在查询中使用该参数时,不需要传递参数。

将您的代码更改为:

  scope :visible,       -> { where(:visible => true) }
  scope :invisible,     -> { where(:visible => false) }
  scope :sorted,        -> { order('softwares.sname ASC') }  
  scope :newest_first,  -> { order("softwares.created_at DESC") }
  scope :search, ->(query) { where('sname LIKE ?', "%#{query}%") }

default_scope仅将范围作为参数,不需要名称。因此改变:

default_scope :visible, -> { where(:visible => true)}

default_scope { where(:visible => true) }