【问题标题】:"missing a template for this request format and variant." when trying to render AJAX response“缺少此请求格式和变体的模板。”尝试呈现 AJAX 响应时
【发布时间】:2016-08-22 20:27:46
【问题描述】:

我在这里尝试使用 select_tag 来过滤汉字单词列表。 我的想法是当用户从下拉列表中选择选项 -> 自动提交表单 -> 使用 AJAX 获取search_by_lesson 操作并将数据填充到#kanji_list。但我遇到了两个问题:

  1. 虽然我的 form_tag 中有 remote: true,但当我从下拉列表中选择时,浏览器仍会导航到新页面 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') %>")

【问题讨论】:

  • 尝试在控制器中添加 respond_to 块

标签: jquery ruby-on-rails ajax


【解决方案1】:

这应该适合你

在你的 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 %>

在您的 application.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') %>")

【讨论】:

  • 现在我有另一个错误:respond_to do |format| 行的“ActionController::UnknownFormat”
  • 如果请求被作为 js 或 html 处理,还要检查您的日志
  • 我已经编辑了我的答案。试试它应该可以工作的代码
猜你喜欢
  • 1970-01-01
  • 2017-07-21
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多