2

リンクをクリックした後、ページの一部をリロードしたい。クリックカウンターを実装したいとしましょう。これが私がやったことです。

show.html.erb

<div id="downloads"><%= render(partial:'downloads', locals: {user: @user}) %></div>

_downloads.html.erb

<% user.attachments.each do |attachment| %>
  <%= attachment['download_count'] %>
    <br>
  <%= link_to 'download', {controller: 'files', action: 'download', attachment: attachment, user: user}%>
<% end %>

show.js.erb

$("#downloads").html("<%= escape_javascript(render('downloads', locals: {user: params[:user]})) %>")

files_controller.rb

def download
  user = User.find(params[:user])
  # increasing attachment's dl count
  # ...
  render(:partial => 'users/downloads', locals: {user: user}, :layout => false)
end

その結果、ページ全体が部分的に置き換えられます。どうしたの?

1つを編集

remote: trueアンカーが言ったようにlink_toに追加されました。

<%= link_to 'download', {controller: 'files', action: 'download', attachment: attachment, user: user}, remote: true %>

files_controller.rb

render(:partial => 'users/downloads', locals: {user: user}, :layout => false)で置き換え

respond_to do |format|
  format.js {  render(:partial => 'users/downloads', locals: {user: user}, :layout => false)}
end

今リンクをクリックしようとしています: 私のページで何も起こりません。コンソールではありますが:

FilesController#download による処理 JS パラメータ: {"attachment"=>{"download_count"=>"175", "filename"=>"filename.doc", "id"=>"2fd9adbf6172740d46060000", "type"=> "appli"}, "user"=>"7fbceaa661727417f55e0000"} レンダリングされた users/_downloads.html.erb (60.7ms) 106ms で 200 OK を完了 (ビュー: 63.1ms)

私は今、JavaScriptの問題に直面していると思います。

4

2 に答える 2