2

Rails アプリで簡単な検索を行っていますが、テーブルの 1 つの列しか検索しません。ユーザーが検索する列を選択できるように、「last_name」や「city」などのオプションを含む単純なドロップダウン メニューを追加しようとしています。

私の見解では:

<%= form_tag teachers_path, :method => 'get', :id => "teachers_search" do %>
<%= hidden_field_tag :direction, params[:direction]%>
<%= hidden_field_tag :sort, params[:sort]%>
  <p>
    <%= text_field_tag :search, params[:search], placeholder: 'First Name' %>
    <%= submit_tag "Search", :first_name => nil %>
  </p>
<% end %>

そして私のモデルでは:

 def self.search(search)
    if search
      where('first_name LIKE ?', "%#{search}%")
    else
      scoped
    end
  end

どんな助けでも大歓迎です。

4

3 に答える 3

2

ドロップダウンメニューにselect_tagを追加できます

<%= select_tag "search_from", "<option>first_name</option><option>last_name</option><option>city_name</option>".html_safe%>

コントローラでは、params [:search_from]の値を検索メソッドに渡すことができます。列名を含めるように変更します

def self.search(search, column_name)
  if search
    where('? LIKE ?', column_name, "%#{search}%")
  else
    scoped
  end
end

私はそれを大雑把に書いたが、それがメッセージを伝えてくれることを願っている。

于 2012-06-21T07:32:17.093 に答える
1

@sohaibsの回答ドロップダウンを拡張することは、ユーザーがいくつかの固定属性で結果をフィルタリングすることのみを許可している場合に適しています。

ビュー

<%= select_tag "search_by", options_for_select(['first_name','last_name','city'].map{|o| [o.humanize,o] }) %>
<%= f.text_field 'search' %>

コントローラ

def search
  User.search params[:teacher][:search_by],params[:teacher][:search]
end

モデル

def self.search(search_by,search_value)
     where('? LIKE ?', search_by, search_value)
end

素晴らしいRails:)

于 2012-06-21T08:03:35.783 に答える
0

やってみました:

def self.search(column, search)
  # some logic
  where('? LIKE ?', column, "%#{search}%")
  # some logic
end
于 2012-06-21T07:29:16.920 に答える