ライブ検索が必要です(ユーザーが入力中にJS/Ajaxを介して結果を表示する)。これはこれまでに書いたコードです。JSとキーアップを使ったRails 4のライブ検索
application.js
$(function() {
$("#email_search input").keyup(function() {
$.get($("#email_search").attr("action"), $("#email_search").serialize(), null, "script");
return false;
});
});
_email.html.erb部分
<%= form_tag emails_path, :method => 'get', remote: true, :id => "email_search" do %>
<%= text_field_tag :search, params[:search], :placeholder => 'Search From, Subject, or Body, Hit Enter To Search', :class => 'form-control' %>
<% end %>
index.html.erb
<div id="emails">
<%= render "emails" %>
</div>
<script>
$(function() {
setInterval(function(){
$.getScript("/emails")
}, 30000);
});
</script>
index.js.erb
$("#emails").html("<%= escape_javascript render("emails") %>");
emails_controller.rb
respond_to :html, :js
def index
@emails = current_user.emails.search(params[:search]).order("created_at DESC")
end
email.rb(検索方法)
def self.search(search)
if search
where('from_email ILIKE ? OR subject ILIKE ? OR body ILIKE ?', "%#{search}%", "%#{search}%", "%#{search}%")
else
all
end
end
は、だからここに何が起こっているのです。私は1-2の文字を入力することができますし、結果をプルアップしますが、それはその後、それはJSのちょうど屋台のようなものです。私は新しいメッセージをポーリングするためにsetIntervalタイマーを無効にしましたが、動作していません。 4.2.xシリーズにはない古いバージョンのRailsではこれがうまくいくので、これは本当にイライラしています。
これはターボの問題ですか?あるいは私のJSを別の方法で書く必要がありますか? jquery-turbolinksもインストールされていますが、いずれにも違いはありません。
ご協力いただきまして誠にありがとうございます。
私は古い投稿を見つけてうれしく思っていますが、Rails 5.1.3アプリで同様の問題が発生し、検索フォームのJS負荷を無くして解決しました。 – nulltek