現在、マイクロポストと呼ばれるオブジェクト(と思います)があります。kindという名前の列を持つデータベース内のテーブルです。これは、「購入」または「販売」のいずれかです。ホームページには、すべてのユーザーのマイクロポストのリストが 2 つのリストに分かれています。1 つは販売用マイクロポストのみ、もう 1 つは購入用マイクロポストのみです。これらの各リストの上に、それらのみを検索できる検索バーを配置しようとしています。次に、ユーザーが検索すると、列に検索結果が表示されます。
問題は、 http://railscasts.com/episodes/37-simple-search-form?autoplay=trueなど、私が見つけたすべてのチュートリアルで、独自のコントローラーを使用してオブジェクトを検索する方法を説明していることです (たとえば、マイクロポストを検索したかった)。購入したマイクロポストのみを検索するにはどうすればよいですか。または販売されているものだけを検索しますか?
編集:明確化
これが app/views/home.html.erb に追加することになっているものです
<% form_tag microposts_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
しかし、私が欲しいのはこれらのうちの 2 つです。1 つは種類 (kind はマイクロポスト テーブルの列) を含むすべてのマイクロポストを検索し、もう 1 つは種類が販売されるすべてのマイクロポストを検索します。これの正しい構文がわかりません。
また、ここに私のmicroposts_controller.rbの関連部分があります
def home
@microposts=Micropost.all
@purchases=@microposts.collect{ |m| m if m.kind == "purchase"}.compact
@sales=@microposts.collect{ |m| m if m.kind == "sale"}.compact
end
編集2:
@microposts、@purchases、および @sales を定義するための良い提案があります。スコープを使用するのが最善の方法だと思います。ただし、これがこの特定の質問にどのように答えるかはまだわかりません。これら 2 つの検索フォームと検索定義をどのように区別すれば、1 つは親切な販売ですべてのマイクロポストを検索し、親切な購入ですべてのマイクロポストを検索できるようになります。検索を完全に異なるものにしたい。どうにかして検索フォームを識別できますか? モデルで販売検索と購入検索を異なる方法で定義するにはどうすればよいですか。私は次のようなものを持っているはずだと知っています
def self.search(search)
if search
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
find(:all)
end
end
micropost.rb で。購入用と販売用に 1 つの定義が必要ですか?
もう一度編集します。
RoRでこの質問をより明確にしようとしました: 特定の属性を持つマイクロポストのみを検索するにはどうすればよいですか?