2017-05-21 6 views
-1

Ich habe eine Migrationsdatei create_subject (Code davon ist unten), eine Subject Klasse enthält Bereiche mit Lambda-Syntax. Wenn ich Subject.visible rufe, bekomme ich Syntaxfehler.Rubin auf Schienen 5 Lambda Syntaxfehler, unerwartet =>, erwartet ')'

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 Fehlerprotokoll

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}%"]) } 

Antwort

3

Legen Raum nicht vor Klammer zu öffnen, wenn Methoden aufrufen. Es sollte wie dieses

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

(DANKE, für die Beantwortung Sieht aus wie die meisten. der Fehler sind behoben. ABER): irb (main): 001: 0> Betreff.visible SyntaxError: C: /Users/SS/Sites/simple_cms/app/models/subject.rb: 7: Syntax erro r, unerwartet '|' Bereich: Suche, -> {| Abfrage | wo (["name LIKE?", "% # {query}%"])} –

+0

@SafiUllah Ich habe meine Antwort mit diesem Beispiel aktualisiert –

+0

Ich kann buchstäblich nicht mehr dankbar sein, Sir @Michal. Ich fühlte mich, als hätte ich diese Sprache nicht mehr gelernt. Vielen Dank so so sehr ... –

0

sein, wenn Sie Abfrage in Rohren setzen gehen |query| dann verwenden:

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

statt

scope :search, ->(query) { where(["name LIKE ?", "%#{query}%"]) } 
Verwandte Themen