2012-12-07 5 views
8

Miałem zadanie, aby wybrać uczniów, których nazwa zaczyna się od wartości paramatu i miasta w wybranej wartości. Jak ustawić ruby ​​na szynach? Zrobiłem tak, ale to nie działa kontrolerSQL Like operator w rubinach na szynach

def list 

    studentcount=Student.count() 
    puts studentcount 
    @studentname = Student.where("name name1 AND city = :cityId1", 
    {:name1 => params[:name], :cityId1 => params[:cityId]}) 

    puts 'studentname' 
    puts @studentname.inspect 
    @students = Student.limit(params[:jtPageSize]).offset(params[:jtStartIndex]).order(params[:jtSorting]) 

    @jtable = {'Result' => 'OK','Records' => @students.map(&:attributes), :TotalRecordCount => studentcount} 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render :json => @jtable} 
    end 
    end 

Odpowiedz

10

Spróbuj:

@studentname = Student.where("name LIKE :name1 AND city = :cityId1", 
    {:name1 => "#{params[:name]}%", :cityId1 => params[:cityId]}) 

To jest raczej brudne rozwiązanie, ale czysty ARel nie poradzi sobie z tym przypadkiem tak, jak sobie życzysz. Możesz spróbować klejnotu Sqeel.

+0

dziękuję za wsparcie .. – Niths

+0

Czy możesz mi pomóc napisać, jeśli oświadczenie dla cityid == 0 – Niths

2

Spróbuj

@studentname = Student.where("name LIKE ? AND city = ?", "#{params[:name]}%", params[:cityId]) 
+0

To sprawi, że nazwa * kończy się * wartością, a nie zaczyna się od niej. – sevenseacat

+0

Dzięki Edytowałem odpowiedź. –

0

jest błąd w swoich metodach, powinno być jak ten

@studentname = Student.where("name = :name1 AND city = :cityId1", 
    {:name1 => params[:name], :cityId1 => params[:cityId]})