sql >> Database teknologi >  >> RDS >> Mysql

Skinner passerer ikke DB-forespørgslen på søgeformularen

Er du sikker på, at du har defineret klassemetoden search i item.rb ? Fordi fejlen siger, at der ikke er nogen search metode defineret på Item klasse. Prøv dog, om følgende virker for dig.

Du ønsker kun at søge, hvis formularen indsendes. Du kan bruge present? metode til at vide, om søgetermen faktisk blev bestået.

Rediger din controller til

def index
  @items = params[:search].present? ? Item.search(params[:search]) : Item.all
end

Bemærk, at et objekt er present kun hvis det ikke er tomt. Dette er praktisk, fordi hvis nogen indtaster " " i formularen, skal du ikke søge efter et tomt felt i nombre felt, men vis alle posterne i items tabel.

Hvis formularen ikke blev indsendt, Item.all vil blive udført.

Rediger din klassemetode til

def self.search(search_term)
  where("nombre LIKE ?", "%#{search_term}%")
end

Du behøver ikke en Item.where fordi klassen Item er den aktuelle kontekst, hvorpå where metode kaldes. Bemærk, at jeg har ændret mønsteret til %#{search_term}% fordi du ikke altid ønsker at matche strenge, der ender med et eller andet mønster.

Håber dette hjælper!




  1. APPLSYSPUB-skema

  2. Optimer en forespørgsel, der grupperer resultater efter et felt fra den sammenføjede tabel

  3. Hvad er den bedste måde at bruge LEFT OUTER JOIN til at kontrollere, om der ikke findes relaterede rækker

  4. ODP.Net Driver Throwing Undtagelse på .NET Core 5.0