2017-01-23 1 views
2

Я беспокою поиск по нескольким значениям CheckBox, как у меня есть post стола, где человек размещать на местах:Rails поиск по многократному значению CheckBox

список флажков в форме:

#=> Form method get 
<%= check_box_tag("post_location", "London") %> 
<%= check_box_tag("post_location", "Azle") %> 
<%= check_box_tag("post_location", "Azure") %> 
<%= check_box_tag("post_location", "Arma") %> 

Контроллер:

@posts= Post.where(["post_location LIKE ? ", "%#{params[:post_location]}%"]).where(["post_title LIKE ? ", "%#{params[:post_title]}%"]) 

Но всегда показывать результат, основанный на последнем флажке.

Как показать все результаты на основе всех значений флажка?

Благодаря

+0

Сделайте свое текстовое поле именем массива первым. –

ответ

1

Я не знаю, вы уже исправили это или до сих пор В любом случае, я пишу ответ для помощи в будущем SO.

О файле вида, как показано ниже:

<%= check_box_tag("post_location[]", "London") %> London            
<%= check_box_tag("post_location[]", "Azle") %> Azle            
<%= check_box_tag("post_location[]", "Azure") %> Azure            
<%= check_box_tag("post_location[]", "Arma") %> Arma 

Если все флажки проверяются затем

"post_locations"=>["London","Azle","Azure","Arma"] 

Теперь на контроллере с постраничными парами, как показано ниже:

if params[:search] #=> if you use inside search form 
    @posts = Post.where('true').paginate(page: params[:page], per_page: 10) 
    @posts = @posts.where("post_title LIKE ? ", "%#{params[:search]}%") unless params[:search].blank? 
    @posts = @posts.where(post_location: params[:post_location]) unless params[:post_location].blank? 
else 
    @posts = Post.paginate(page: params[:page], per_page: 10) 
end 

На post_title вы можете использовать что-нибудь вроде post_title или что-нибудь еще.

Надеюсь, что это поможет

0

Это потому, что вы используете такое же имя флажков, поэтому значение флажков переопределены, вам нужно получить значение checkbox в массиве. Таким образом, вы можете использовать для этого использование multiple: true. Как только данные поступают в массив, вы можете сопоставить его в своей таблице.

+0

Проверено, но не работает – jesica

+0

Вы можете получить массив местоположений в параметрах? –

0

Вам просто нужно добавить массив с именем. Вот код для него

<%= check_box_tag "post_location[]", "London") %> 
<%= check_box_tag "post_location[]", "Azle") %> 
<%= check_box_tag "post_location[]", "Azure") %> 
<%= check_box_tag "post_location[]", "Arma") %> 
+0

Проверено, но не работает – jesica

+0

Просто перекрестная проверка параметров консоли post_location - это массив. вы предполагаете получить массив. см этот Параметры: { "utf8" => "✓", "authenticity_token" => "/ xcgacd/qxecAjeZjqrGGCrTp4bNT2C6bhw6R7mnMaefB1xOfcXzULsdc4zyXp8ebapBw == NdBUyPF6yovCEYsjw", "пост" => { "post_location" => [ "Лондон", "Azle" , "Azure", "Arma"]}, "commit" => "Создать сообщение"} –

0
<%= check_box_tag("post_location", "London") %> 
<%= check_box_tag("post_location", "Azle") %> 
<%= check_box_tag("post_location", "Azure") %> 
<%= check_box_tag("post_location", "Arma") %> 

стандарт HTML для выше помощника является:

<input id="post_location" name="post_location" type="checkbox" value="London" />  
<input id="post_location" name="post_location" type="checkbox" value="Azle" />  
<input id="post_location" name="post_location" type="checkbox" value="Azure" /> 
<input id="post_location" name="post_location" type="checkbox" value="Azure" /> 

Здесь имя же так будет дает результат последнего флажка.

Вы можете взять Arry для списка флажков, как предложено @Rankit Ranjan,

<%= check_box_tag "post_locations[]", "London") %> 
<%= check_box_tag "post_locations[]", "Azle") %> 
<%= check_box_tag "post_locations[]", "Azure") %> 
<%= check_box_tag "post_locations[]", "Arma") %> 

После этого в контроллере, вы получите его в параметре

"post_locations"=>["London","Azle","Azure","Arma"] ## I assume all checkboxes are selected. 

Затем контроллер, запрос должен выглядеть так:

@posts= Post.where(["post_location IN (?) ", "%#{params[:post_locations]}%"]).where(["post_title LIKE ? ", "%#{params[:post_title]}%"]) 

 Смежные вопросы

  • Нет связанных вопросов^_^