2017-05-08 30 views
1

ブール値の属性 "in_season"がtrueを返し、それが機能しないデータベースからオブジェクトのみを照会しようとしています。レールのブール値属性に基づいてクエリを実行する方法は?

class Item < ApplicationRecord 
validates :name, presence: true, uniqueness: true 
validates :price, presence: true, numericality: true 
validates :quantity, presence: true, numericality: { only_integer: true } 
validates :description, presence: true 


def self.in_season 
    where("in_season = ?", "true") 
end 

エンド

class ItemsController < ApplicationController 

def index 
    @items = Item.in_season 
end 

end 

すべてが正しく設定されていると私はすべてのエラーを得ていないんだけど、アイテムのどれも正しく照会しないされているので、私のインデックスページが空白になっているような気がします。

+0

ブール値を求めていますが、比較のために文字列を渡しています。どこで( "in_season =?"、true)またはどこで(in_season:true)あなたのために働く必要があります。 – Phobos

答えて

2

構文を修正する必要があります。あなたの間違いは、文字列"true"を渡しているのに対し、ブール値trueを渡したいとします。

def self.in_season 
    where(in_season: true) 
end 

それは、このようなニーズに合わせてscopeを使用する方がRailsyです:

scope :in_season, -> { where(in_season: true) } 

Rails Guides on scopesにスコープについては、こちらをご覧ください。

+0

それはうまくいった!感謝万円! – goodjobbin85

関連する問題