2016-08-22 4 views
1

Я пытаюсь использовать select_tag здесь, чтобы отфильтровать список слов кандзи. Моя идея здесь, когда пользователь выбирает параметры из раскрывающегося списка -> auto submit form -> использовать AJAX, чтобы перейти к search_by_lesson действию и заполнить данные в #kanji_list. Но у меня 2 проблемы:«отсутствует шаблон для этого формата и варианта запроса». при попытке визуализации ответа AJAX

  1. Хотя я remote: true в моем form_tag, когда я выбрать из выпадающего списка, браузер по-прежнему переходит на новую страницу http://localhost:3000/search_kanjis_by_lesson?lesson=1, но не остается на индексной странице.
  2. Ошибка в заголовке. Хотя я хочу, чтобы этот search_by_lesson только визуализировать ajax, я не хочу иметь отдельный файл search_by_lesson.html.erb в папках.

Вот мой index.html.erb

<%= form_tag search_kanjis_by_lesson_path(lesson: params[:lesson]), method: :get, remote: true do |f| %> 
    <%= select_tag :lesson, options_for_select(@lessons), include_blank: true, onchange: "this.form.submit()" %> 
<% end %> 
<table class="ui celled padded striped table"> 
    <thead> 
     <tr> 
      <th>Kanji</th> 
      <th>Meaning</th> 
      <th>Lesson</th> 
     </tr> 
    </thead> 
    <tbody class="kanji_list"> 
     <%= render 'index' %> 
    </tbody> 
</table> 

Я использую частичный визуализации списка _index.html.erb

<% @kanjis.each do |kanji| %> 
    <tr> 
     <td><%= kanji.word %></td> 
     <td><%= kanji.meaning %></td> 
     <td><%= kanji.lesson %></td> 
    </tr> 
<% end %> 

Я получил это в моих маршрутах

resources :kanjis 

get '/search_kanjis_by_lesson', to: 'kanjis#search_by_lesson', as: :search_kanjis_by_lesson 

и в моих kanjis_controllers. rb

class KanjisController < ApplicationController 

    # ... other generic actions: edit, show ... 

    def index 
     @kanjis = Kanji.all 
     @lessons = [*1..32]  # @lessons is just an array of int. 
    end 

    def search_by_lesson 
     @kanjis = Kanji.find_by_lesson params[:lesson] 
    end 
end 

Наконец, у меня есть search_by_lesson.js.erb

$("#kanji-list").html("<%= escape_javascript(render 'index') %>") 
+0

Попробуйте добавить respond_to блок в контроллере –

ответ

0

Это должно работать для вас

В вашем index.html.erb

<%= form_tag search_kanjis_by_lesson_path, method: :get, remote: true do %> 
<%= select_tag :lesson, options_for_select(@lessons), include_blank: true %> 
<% end %> 

В приложении .html.erb

$(document).ready(function(){ 
$('#lesson').change(function(){ 
    $('form').submit(); 
}); 
}); 

В вашем KanjisController

def search_by_lesson 
     @kanjis = Kanji.find_by_lesson params[:lesson] 
     respond_to do |format| 
     format.js 
     end 
    end 

В вашем search_by_lesson.js.erb

$(".kanji_list").html("<%= escape_javascript(render 'index') %>") 
+0

Теперь у меня есть другая ошибка: "ActionController :: UnknownFormat" в строке 'respond_to do | format | ' – user3448806

+1

также проверяет ваш журнал, если запрос обрабатывается как js или html –

+0

Я отредактировал свой ответ. Попробуйте этот код, он должен работать –

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