2017-03-26 11 views
0

私がしたいのは、2つの列を1つのチェックボックスの値で検索することです。Rails:check_box_tagの値で2つの列を検索する方法

stepsモデルはplace1place2の列を持ちます。

class CreateSteps < ActiveRecord::Migration 
    def change 
    create_table :steps do |t| 
     t.integer :place1 
     t.integer :place2 
     t.integer :time 

     t.timestamps null: false 
    end 
    end 
end 

1つの列しか検索できません。ビューは次のとおりです。

<%= form_tag(steps_path, :method => "get", id: "search-form2") do %> 
    <% @places.each do |p| %> 
     <%= check_box_tag('place[place1][]', p.id) %> 
     <%= label_tag(p.id, p.id)%> 
    <% end %><br> 
    <%= submit_tag "Search" %> 
<% end %> 

<% if @choices.present? %> 

    <% @choices.each do |c| %> 
     <%= c.place1 %>, <%= c.place2 %>, <%= c.time %><br> 
    <% end %> 

<% else %> 
    <p>not exist</p> 
<% end %> 

コントローラは次のとおりです。

class StepsController < ApplicationController 

    def index 

    @places = Place.all 

    if params[:place] 
     @choices = Step.where(steps: params[:place]).order(time: :asc) 
    end 

    end 

end 

私に助言を与えることができれば幸いです。

EDIT

マイビュー画像は、次の通りです。

[ ] check box 1 
[ ] check box 2 
[ ] check box 3 
[ ] check box 4 
[ ] check box 5 

[Seach button] 

サンプルレコードは以下のとおりです。

Place1 place2 
1   2 
1   3 
1   4 
1   5 
2   3 
2   4 
2   5 
3   4 
3   5 
4   5 

チェックボックス2,4,5がチェックされている場合、私の期待値は3レコードです。 {2,4}、{2,5}、{4,5}である。

チェックボックス1,3,4,5がチェックされている場合、私の期待値は6レコードです。 {1、3}、{1,4}、{1,5}、{3,4}、{3,5}、および{4,5}である。

答えて

0

場所のチェックボックスは、params[:place][:place1]の配列で保存する必要があります。物事をより明確にするために、私はplace[places][]に名前を設定して、params[:place][:places]に名前を変更します。

だから我々が行うことができ、コントローラに:

place1, place2 = params[:place][:places] if params[:place] 
@choices = Step.where(place1: place1, place2: place2).order(time: :asc) 

側注:

  • 私は私が完全にplaces関係を理解すると言うことはできませんが、それはplace1place2でビットをオフに感じています。私が想像できる最初の問題は、モデルから引っ張られた場所間の正しいマッピングがplace1place2に一致するようにする方法です。あなたはhas_manyの関係を作ることを検討しましたか、それはフィルタリングを簡単にすることができると思いますか?
+0

@Nimirさん、ありがとうございました。私は自分の投稿(投稿の後半)を編集し、私がしたい画像を追加します。あなたの時間をありがとう。 – SamuraiBlue

関連する問題