rails 5渲染JS请求

时间:2017-04-12 16:12:50

标签: ruby-on-rails coffeescript

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

这是索引控制器代码

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

由此我喜欢它应该只渲染部分但它渲染布局也,但我只想它应该渲染部分。有可能......

1 个答案:

答案 0 :(得分:1)

嗨我有一个想法要做到这一点。你正在使用respond_to博客。你可以创建一个与控制器动作名称相同的咖啡文件,然后像这样将咖啡渲染放在里面

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'

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