1
私はSinatraアプリケーションを作成しようとしています。Sinatra scope nomethoderror
しかし、私は解決できないバグがあります。だから私は助けが必要です。
私は/タスクに入った?状態=行われ、アプリケーションのアラート
NoMethodErrorタスク/で未定義のメソッド `status_is_done」
どのように私はバグを修正することができますか?可能であれば、何かヒントを教えてください。
ここにモデルコードがあります。ここで
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
エンド エンド
とは、コントローラー・コードです。
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
ああどのように素敵で
を交換してみてください。私はバグを修正することができました。なぜ私にバグがあったのですか? –
これで問題は解決しましたか?スコープは、オブジェクトではなくモデルに対して呼び出されるはずです。 – Sajin
私は理解しました。私を助けてくれてありがとう!! –