2012-11-12 3 views
0

아마 바보 같은 질문에, 그래서 나는이 사전에 사과 :색인 작업 문제는 레일 컨트롤러

내가 가지고있는 인덱스가 행동 나는 모든 items (대만족)을 보여주기 위해 사용하고 Item Controller. 이제는 표시된 항목 (여기서는 제목에 '신발'이있는 항목)을 필터링하려고합니다.

인덱스 작업에서 @item = Item.find (params [: id]) 문을 정의 할 수 없습니다.

두려운 ActiveRecord :: RecordNotFound가 ItemsController # index ---- ID 오류없이 Item을 찾을 수 없습니다.

아이디어가 있으십니까?

항목 컨트롤러

def index 
    @item = Item.find(params[:id]) 
    @items = Item.where(@item.title =~ /shoes/i).paginate(:page => params[:page], :per_page => 30) 

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

답변

5

이 당신이 원하는 것을 사실이다. 당신이 시도한 것은 말이되지 않습니다.

def index 
    @items = Item.where("title ILIKE '%shoes%'").paginate(:page => params[:page], :per_page => 30) 

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

편집 :

방법으로는 당신이 ILIKE이 대신

item=Item.arel_table 
Item.where(item[:title].matches('%shoes%')) 
+1

존재처럼 뭔가를 할 수있는 것 같다 지원되는 모든 데시벨과 호환 될 수있는 (그리고 LIKE의 대소 문자 구분)는 데이타베이스에 따라 다르므로 휴대용 솔루션에 관심이 있다면 일반적으로 [hackery가 필요합니다] (http://stackoverflow.com/a/203419/479863). AFAIK, ILIKE는 PostgreSQL에 특정 적입니다. 즉, 당신은 바른 길을 가고 있습니다. –

+0

아픈 - 이거 네가 한 짓을 설명해 줄래? (주로 "title ILIKE '% shoes %'"부분에 적용 하시겠습니까? – abhir

+0

RegEx 방식으로 모든 것을 적용 할 수 있습니까? – abhir