2015-10-08 4 views
0

У меня есть приложение Rails, которое показывает список ресторанов с разными параметрами. Я пытаюсь добавить фильтр через флажок, чтобы, если пользователь проверяет флажок, в представлении отображаются только те сообщения, где рестораны оцениваются Zagat.Почему этот флажок не подает данные? (Rails)

Мой код ниже. Почему он не работает?

ПОСТЫ индексный файл (index.html.erb)

<script type="javascript"> 
function sendData() { 
    $.post("index",{'zagat_status':$('#zagat_status'.val("")}) 
    .done(function(data) { 
     alert('Success!'); 
    }); 
} 

$(document).ready(function() { 
    $('#zagat_status').change(function() { 
     sendData(); 
    }); 
}); 
</script> 
      <label> Zagat<dd>rated</dd><input type="checkbox" name="zagat_status" value="Yes"> 
      </label> 

ПОСТЫ УПРАВЛЕНИЯ

class PostsController < ApplicationController 
    before_action :set_post, only: [:show, :edit, :update, :destroy] 

    # GET /posts 
    # GET /posts.json 
    def index 
    @posts = Post.all 
    if params[:search] 
     @posts = @posts.search(params[:search]).order("created_at DESC") 
    end 
    if params[:zagat_status].present? 
     @posts = @posts.zagat_status(params[:zagat_status]).order("created_at DESC") 
    end 
    end 

ПОСТЫ МОДЕЛЬ

scope :zagat_status, -> (zagat_status) { where zagat_status: zagat_status } 
+0

В каком виде ваш код не работает? (Например, вызван ли вызов Ajax или нет? Получает ли ваш контроллер правильные параметры или нет?). Кроме того, ваш флажок не имеет идентификатора zagat_status, который, как кажется, предполагается в остальной части вашего кода. –

+0

Я попытался добавить id из zagat_status, все еще не работает. когда я смотрю в журнал rails, я не вижу ничего, подтверждающее, что флажок был проверен. как проверить, выполняется ли вызов ajax или нет? – hikmatyar

+0

У Chrome есть вкладка сетевого инспектора –

ответ

0

Вы уверены, что получили правильное значение для этого флажка? Если вы положили строку

raise params.to_s в начале вашей функции индекса, отправляет ли вы нужные параметры? Это поможет определить, является ли проблема на стороне javascript (скорее всего) или на стороне сервера rails.

Недавно я столкнулся с подобным вопросом, где называя $('#zagat_status').val()

не дал мне значение, я хочу. Попробуйте использовать нижеприведенный фрагмент, в котором вы вызываете ($(this).is(':checked')), чтобы проверить, установлен ли флажок и передать его вашему контроллеру.

$('#zagat_status').change(function(){ 
    var isChecked = ($(this).is(':checked')) 
    $.post("index",{'zagat_status': isChecked }) 
.done(function(data) { 
    alert('Success!'); 
}); 
}) 
+0

Я заменил весь свой код javascript в файле index.html.erb с вашим кодом выше, поместите его в тег скрипта и повторите попытку, но он не работает. – hikmatyar

+0

также я проверил свой журнал разработки. он не показывает никаких признаков того, что данные передаются. буквально ничего не меняется в моем журнале разработки, когда я проверяю/снимаю флажок – hikmatyar

+0

Одна вещь, которую я только что заметил - вы используете zagat_status в качестве имени для вашего ввода, но идентифицируете его как «#zagat_status» в jquery. Дайте свой флажок id = 'zagat_status', чтобы идентификатор поймал его или изменил ваш селектор jquery на выбор по атрибуту name. Тот факт, что журнал разработки не изменяется, когда вы нажимаете/unclick, означает, что jquery не регистрирует действие click. –

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