2013-07-11 53 views
-1

工作在usrshow.html.erbWHERE条件不轨

<%= form_for userview_path, :method => 'get' do |f|%>  
<%= f.collection_select :city, Place.all, :id, :name, :prompt => 'select place' %> 
<%= text_field_tag :search %> 
<%= submit_tag "Search"%> 
<% end %> 

在hotels_controller

def usrshow 
    if params[:search].present? 
     @hotels = Hotel.where(["city_id = ? and hotels LIKE ?",params[:city], "%#{params[:search]}%"]) 
     else 
     @hotels = Hotel.all(:order => 'id DESC') 
    end 

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

我要搜索和显示酒店根据所选择的city.But这个代码不加工。

+2

“不工作”是不够的信息。你有错误吗?这是什么意思“它不工作”? –

+0

此代码未搜索字段。它只返回空字段 –

+0

您是否在酒店表中有“酒店”或“名称”字段? – Debadatt

回答

0

你不需要在你的其中[]括号:

@hotels = Hotel.where("city_id = ? and hotels LIKE ?",params[:city], "%#{params[:search]}%") 

指定您的错误。不工作是描述

您可以检查SQL查询在控制台:

Hotel.where("city_id = ? and hotels LIKE ?",params[:city], "%#{params[:search]}%").to_sql 

它会告诉你确切的查询。你可以运行你的数据库并验证结果。

0

使用的简单搜索条件

def usrshow 
    if params[:search].present? 
    @hotels = Hotel.where("city_id = ? AND hotels LIKE ",params[:city],"%#{params[:search]}%").order('id DESC') 
     else 
     @hotels = Hotel.all(:order => 'id DESC') 
    end 

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

您的参数

Parameters: {"commit"=>"Search", "search"=>"m", "/userview"=>{"city"=>""}, "utf8"=>"✓"} 

手段params[:city]nil我认为你必须使用params["/userview"]["city"]代替

@hotels = Hotel.where("city_id = ? AND hotels LIKE ", 
         params["/userview"]["city"], 
         "%#{params[:search]}%").order('id DESC')