2017-04-03 1 views
1

Ich versuche Sinatra-Anwendung zu machen.Sinatra Umfang nomethoderror

Aber jetzt habe ich einen Fehler, den ich nicht lösen kann. Also ich möchte Hilfe.

Als ich/Aufgaben eingegeben? Status = getan, um die Anwendung der Benachrichtigung

NoMethodError bei/Aufgaben nicht definierte Methode `status_is_done‘

Wie kann ich den Fehler beheben? Bitte zeigen Sie mir irgendwelche Tipps, wenn Sie können.

Hier ist der Modellcode.

module Todo 
class Task < ActiveRecord::Base 
scope :status_is, ->(status){where(status: status)} 

scope :status_is_not_yet, ->{status_is(NOT_YET)} 
scope :status_is_done, ->{status_is(DONE)} 
scope :status_is_pending, ->{status_is(PENDING)} 

NOT_YET = 0 
DONE = 1 
PENDING = 2 

STATUS = { 
    'NOT_YET' => NOT_YET, 
    'DONE' => DONE, 
    'PENDING' => PENDING 
}.freeze 

validates :name, presence: true, length: {maximum: 140} 
validates :content, presence: true 
validates :status, numericality: true, inclusion: {in: STATUS.values} 


def status_name 
    STATUS.key(self.status) 
end 

Ende Ende

Und hier ist der Controller-Code. Versuchen

require 'sinatra/base' 
require 'haml' 


require 'todo/db' 
require 'todo/task' 

module Todo 
class Application < Sinatra::Base 

set :haml, escape_html: true 

configure do 
    DB.prepare 
end 

configure :development do 
    require 'sinatra/reloader' 
    register Sinatra::Reloader 
end 

get '/' do 
    redirect :tasks 
end 

get '/tasks' do 
    @tasks = Task.order('created_at DESC') 
    #statusによって@statusの値を変更 
    if (@status = params[:status]) 
    case @status 
    when 'not_yet' 
     @tasks = @tasks.status_is_not_yet 
    when 'done' 
     @tasks = @tasks.status_is_done 
    when 'pending' 
     @tasks = @tasks.status_is_pending 
    else 
     @status = nil 
    end 
    end 

    haml :index 
end 

end 
end 

Antwort

0

ersetzt
@tasks = @tasks.status_is_done 

mit

@tasks = Task.order('created_at DESC').status_is_done 
+0

Oh, wie schön. Ich konnte Bugs beheben. Warum hatte ich einen Käfer? –

+0

Hat dies Ihr Problem gelöst? Ich denke, dass Bereiche für Modelle und nicht für ihre Objekte aufgerufen werden sollten. – Sajin

+0

Ich habe verstanden. Danke für die Hilfe!! –