2015-10-08 2 views
0

У меня есть приложение Rails, которое показывает рекомендации ресторана рядом с пользователем.Форма не отправлена ​​должным образом

Есть страница Posts#index, в которой показаны все Restaurant s, и у каждого Restaurant есть другие параметры. Меня больше всего интересует Zagat_status.

Когда пользователь нажимает флажок для Zagat_status, я хочу, чтобы обновить Posts#index вид так, что он показывает только Restaurant сек, где Params zagat_status = "Yes".

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

просмотров/сообщений/index.html.erb

<div class="main-wrap"> 
    <div class="map-side-bar"> 
    <div class="search-filter"> 
     <form> 
     <span>Accolades</span> 
     <div class="accolades-panel"> 

      <label> 
      Zagat<dd>rated</dd><input type="checkbox" name="zagat_status" value="Yes"> 
      </label> 

     </div> 
     </form> 
    </div> 
    </div> 
</div> 

модели/post.rb

class Post < ActiveRecord::Base 

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

    validates :name, presence: true 
    validates :city, presence: true 
    validates :address, presence: true 

    def self.search(query) 
    where("name like ? OR city like ? OR address like ?", "%#{query}%", "%#{query}%", "%#{query}%") 
    end 
end 

Контроллеры/posts_controller.rb

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 
+1

как вы подачи ваша форма? Я имею в виду, что у вас нет кнопки отправки. –

+0

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

+0

, так что вам нужно будет связать событие на флажке и сделать ajax-вызов со значением –

ответ

0

index.html.erb

<div class="main-wrap"> 
    <div class="map-side-bar"> 
    <div class="search-filter"> 
     <form id="my_form"> 
     <span>Accolades</span> 
     <div class="accolades-panel"> 

      <label> 
      Zagat<dd>rated</dd><input id="zagat_status" type="checkbox" name="zagat_status" value="Yes"> 
      </label> 

     </div> 
     </form> 
    </div> 
    </div> 
</div> 

index.js

function sendData() { 
    $.post("<your post url here>",{'zagat_status':$('#zagat_status'.val()}) 
    .done(function(data) { 
     alert('Success!'); 
    }); 
} 

$(document).ready(function() { 
    $('#zagat_status').change(function() { 
     sendData(); 
    }); 
}); 

Импорт Lib JQuery и index.js в index.html.erb в

+0

err, тот же вопрос - как это реализовать в коде? – hikmatyar

+0

@hikmatyar dude, поместите атрибут id в форму и на вход в Javascript. И поставьте слушателя на флажке, как: $ ('# checkbox'). Change (function() {callAjax();}); что-то вроде этого ... Не сложно ... В функции callAjax вы можете легко найти в Интернете ... –

+0

спасибо, но это все еще слишком мало для меня, чтобы составить ответ ... (фактический код отключен помогло бы) – hikmatyar

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