2014-01-31 3 views
0

Я новичок, использующий AJAX, и теперь я пытаюсь работать с группой выделенных ящиков, чтобы, когда пользователь выбирает значение из во-первых, второй обновляет свои значения. Я пытаюсь использовать AJAX, JQuery и ROR, но пока я не могу извлечь значение из первого поля и передать его контроллеру, чтобы отфильтровать результаты второго.Передать значение выбора контроллеру без обновления страницы (AJAX, RAILS, JS)

Это мой код для index.html.erb

<%= form_tag(posts_path, remote: true, :method => 'get', class: "forma") do %> 

    <%= select_tag("box", options_from_collection_for_select(@posts, :content,  :content), :prompt => "Select") %> 

     <p> 

    <%= select_tag("nbox", options_from_collection_for_select(@listposts, :content,   :id), :prompt => "Select") %> 

    <p> 

    <%= submit_tag "Show", class: "btn btn-info" %> 

    <% end %> 

Это мой index.js.erb

$(document).ready(function() { 

    $(".btn").on("click", function() { 
      $('.table').fadeToggle(); 
    }) 

    $('#box').change(function(){ 
      $.ajax({ 
      type: 'POST', 
      url: '/jess/rails/dummy/app/controllers/posts_controller', 
      data: {'filter' : $(this).val() }, 
      success: function(data){ 
      } 
      }) 
      $('#nbox').fadeIn(); 
     $('.btn').fadeIn(); 
    }) 
}) 

Это мой контроллер

class PostsController < ApplicationController 

    respond_to :html, :js 

    def new 
    @post = Post.new 
    end 

    def create 
    @posts = Post.all 
    @post = Post.new(post_params) 
    if @post.save 
     flash.now[:notice] = "YEAH" 
     respond_to do |format| 
     format.html {redirect_to @post.content} 
     format.js 
     end 
    else 
     render "/" 
    end 
    end 

    def show 
    @post = Post.find(params[:id]) 
    end 

    def index 
    @posts = Post.all 
    @listposts = Post.where('content LIKE ?', params[:box]) 
    end 

    def next 
    @listposts = Post.where('content LIKE ?', params[:box]) 
    end 

    private 

    def post_params 
     params.fetch(:post, {}).permit(:content) 
    end 

end 

Я думаю, что я «Я делаю это неправильно с частью AJAX в js.erb, но я изменил его так много раз, что больше не знаю. Ваша помощь будет так высоко оценена!

ответ

0

Похоже, есть несколько небольших проблем.

Во-первых, похоже, что URL-адрес, который вы используете, может быть неправильным. URL-адрес запроса AJAX будет иметь тот же формат, что и URL-адрес, если вы хотите просмотреть эту страницу в своем браузере.

С тем, что вы предоставили, я не могу точно сказать, что это должно быть, но я могу привести вам пример. Предполагая, что вы обращаетесь к своей индексной странице, просто «http://example.com/index» (или что-то подобное), вы также можете вызвать функцию, которую вы хотите, как нечто, основанное на ее маршруте. Если маршрут был «обновлен», тогда это будет что-то вроде «http://example.com/update».

В принципе, не используйте путь к папке, но вместо этого используйте веб-путь.

Во-вторых, вы не делаете ничего своего обратного вызова в своем запросе AJAX. С AJAX вы отправляете и получаете информацию с сервера, тогда вы должны использовать JavaScript для обновления всех необходимых обновлений вручную. Таким образом, вам нужно, чтобы ваше действие по обновлению возвращало некоторую информацию, которую вы затем можете использовать для изменения состояния вашего второго набора ящиков.

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