-1

usrshow.html.erb で

<%= 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

選択した都市に基づいてホテルを検索して表示する必要がありますが、このコードは機能しません。

4

3 に答える 3

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')
于 2013-07-11T10:08:14.883 に答える
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
于 2013-07-11T09:43:23.650 に答える
0

whereに[]ブラケットは必要ありません:

@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

正確なクエリが表示されます。DB を実行して結果を確認できます。

于 2013-07-11T09:39:23.540 に答える