1

検索フォームで検索したい 2 つのモデルがあります

<%= form_tag({:controller => 'search', :action => 'search'}, {:method => 'get', :remote => true })  do |select| %>
<%= label_tag :search, "Enter Keywords Here" %>
<%= text_field_tag :search, params[:search] %>

<%= label_tag :country, "Search by Country" %>
<%= collection_select(:country, :country_id, Country.all, :id, :name, :prompt => 'Please Select') %>

<%= label_tag :difficulty, "Search by Difficulty" %>
<%= select_tag :difficulty, options_for_select([['Beginner'],['Intermediate'],['Expert']]), {:prompt => 'Please Select'} %>

<%= label_tag :preperation_time, "Search by preperation time" %>
<%= select_tag :preperation_time, options_for_select([['15..30'],['30..60'],['60..120']]), {:prompt => 'Please Select'} %><br>

<%= submit_tag "Search", :class => "searchbutton" %>
<% end %>

私の理解では、すべての列を検索できるようにしたい場合、SQLステートメントは次のようになります

SELECT column dish_name, difficulty, preparation_time FROM Recipe LEFT JOIN Country ON Recipe.dish_name = Country.name AND Recipe.difficulty = Country.name AND Recipe.preparation_time = Country.name

これは完全に間違っている可能性があります。私が達成したいのは、1 つのパラメーターまたは最大 4 つすべてで検索できるようにすることです。

これをレール構文に変換する方法がわかりません。現在、

q = "%#{params[:search]}%"
@countrysearch = Recipe.includes(:country).where("dish_name LIKE ? OR countries.name LIKE ? OR difficulty LIKE ? OR preperation_time LIKE?", q, q, q,q )

誰かが私を正しい方向に向けることができれば、それは大歓迎です

4

1 に答える 1

1

理解できない

このメソッド呼び出しで何をしているのかをよりよく理解したい場合はto_sql、生成された SQL クエリを出力するためにいつでも を使用できます。

また、レールによって縮退されたログとコンソールで確認できます。

左結合の例

@result = Recipe.joins("LEFT OUTER JOIN countries ON countries.id = recipes.country_id").select

しかし、可能であり、あなたがやっている方法を行う方が良い

@result = Recipe.includes(:country)

クエリの印刷

puts @result.to_sql

クエリの作成

countrysearch = Recipe.includes(:country).arel_table
countrysearch = countrysearch.or(countrysearch[:country].eq(params[:search][:country])) if params[:search].has_key?(:country)
#...
countrysearch = countrysearch.or(countrysearch[:difficulty].eq(params[:search][:difficulty])) if params[:search].has_key?(:difficulty)

参考文献

次の参考文献で代替案を確認してください。

  1. レール/アレル
  2. 215: Rails 3 の高度なクエリ

これがお役に立てば幸いです!!

于 2012-11-13T18:38:59.157 に答える