1

これで、モデル内の1つの列を検索して期待どおりの結果を返す簡単な検索フォームができましたが、4つのtext_field / Select_tagsを使用して、同じモデル内の4つの列を検索できるようにすることで、これを基にしたいと思います。

たとえば、これをsolrのように提供するGemsを見てきましたが、特にこのような小さなアプリでは、達成したいことには少しやり過ぎだと思います。

アプリはシンプルで、レシピをアップロードしたり、お気に入りにレシピを追加したり、レシピを検索したりできます。

これまでのところ、このように見えます

コントローラ

 def search
 @countrysearch = Recipe.where(:country_of_origin => params[:search]).all
 end

検索フォーム

 <%= form_tag({:controller => 'search', :action => 'search'}, {:method => 'get'})  do |s| %>
 <%= text_field_tag :search, params[:search] %>
 <%= submit_tag "Search" %>
 <% end %>

出力(表示)

  <% @countrysearch.each do |r| %>
  <tr>
   <td><%= r.dish_name %></td>
   <td><%= r.country_of_origin %></td>
   <td><%= r.difficulty %></td>
   <td><%= r.preperation_time %></td>
   <td><%= ingredient_names(r.ingredients) %></td>
   <td><%= preperation_steps(r.preperations) %></td>
 </tr>

検索フォームに、選択したタグを使用して「新しいレシピフォームを作成」を反映させたい

  <%= f.label :dish_name, "Dish Name" %>
  <%= f.text_field :dish_name, :placeholder => "Enter Dish Name" %>

  <%= f.label :country_of_origin, "Country Of Origin" %>
  <%= f.select :country_of_origin,  [['Wales'],['Scotland'],['England']], {:include_blank => 'Please Select'} %>

  <%= f.label :difficulty, "Difficulty Level" %>
  <%= f.select :difficulty, [['Beginner'],['Intermediate'],['Expert']], {:include_blank => 'Please Select'} %>


  <%= f.select :preperation_time, [['15..30'],['30..60'],['60..120']], {:include_blank => 'Please Select'} %>


 <% end %>

正しい方向へのいくつかのポインタをいただければ幸いです。ありがとうございました

4

1 に答える 1

2

コントローラーに渡したすべてのパラメーターを使用して実行できます。

def search
 @countrysearch = Recipe.where({:dish_name => params[:search][:dish_name], :country_of_origin => params[:search][:country_of_origin], :difficulty => params[:search][:difficulty], :preperation_time => params[:search][:preperation_time]}).all
end

これはうまくいくはずです。他にも選択肢がありますが、シンプルなものが必要な場合は、これが適しているかもしれません。

編集:

検索で他に何もない場合は、次のようなことができます。

<%= form_tag({:controller => 'search', :action => 'search'}, {:method => 'get'})  do |s| %>
 <%= text_field_tag :dish_name, params[:dish_name] %>
 <%= select_tag "country_of_origin", options_from_collection_for_select(@recipes, "country_of_origin", "country_of_origin_name")
 <%= select_tag "difficulty ", options_from_collection_for_select(@recipe, "difficulty ", "difficulty ")
 <%= select_tag "preperation_time", options_from_collection_for_select(@recipe, "preperation_time", "preperation_time")
 <%= submit_tag "Search" %>
 <% end %>

次に、コントローラーでパラメーターを直接渡すだけです

def search
 @countrysearch = Recipe.where(params).all
end
于 2012-11-09T10:02:43.503 に答える