rails 5 根据 JS 请求呈现

rails 5 render on JS request

您好,我正在尝试从同一索引控制器响应中呈现索引页面的特定部分,我不知道这是否可能..

这是索引控制器代码

def index
@songs = Song.language_fillter(params[:language]).category_fillter(params[:category]).paginate(:page =>params[:page], :per_page => 6)
@languages = Song.distinct.select(:language)
@category = Song.distinct.select(:category)
respond_to do |format|
  format.html{}
  format.js{ render partial: 'songs/songshow', :collection => @songs, :layout => false}
end
end

index.html.erb

<ul class="nav justify-content-center mt-3">
 <li class="nav-item">
  <select class="custom-select song_filter" id="language_filter">
  <option value=""selected>Language</option>
  <% @languages.each do |lang| %>
    <option value="<%= lang.language %>"><%= lang.language %></option>
  <% end %>
</select>
</li>
<li class="nav-item">
   <select class="custom-select song_filter" id="category_filter">
     <option value="" selected>Category</option>
     <% @category.each do |cat| %>
     <option value="<%= cat.category %>"><%= cat.category %></option>
     <% end %>
   </select>
 </li>
</ul>
   <div class="container">
 <div class="mt-5 row" id="songs_display">
     <%= render partial: 'songshow' %>
 </div>

在此我喜欢用 CoffeeScript

更改 id songs_display 的内容
$(document).on 'change', '.song_filter', () ->
  language = $('#language_filter').val()
  category = $('#category_filter').val()
  console.log language+" "+category
  $.ajax '/songs',
  type:'GET'
  data:{language: language,category: category }
  dataType: 'text'
  success: (data,textStatus,jqXHR) ->
    $('#songs_display').html data

据此我喜欢它应该只呈现部分但它也呈现布局但我只希望它应该呈现部分。可以吗..

嗨,我有一个想法可以做到这一点。您正在使用 respond_to 博客。您可以创建一个与 Controller 操作名称相同的咖啡文件,然后像这样将咖啡渲染器放入其中

index.js.coffee

$('#songs_display').html("<%= j render partial: 'songs/songshow', :collection => @songs %>");

更改索引操作 respond_to

  format.js{}

和您的 js 请求

  $.ajax '/songs',
  type:'get'
  data:{language: language,category: category }
  dataType: 'script'

我希望这对你有用。如果有任何问题,请告诉我。