RailsでWebアプリを学習しながら作成しています。Topページからログインし、1分くらいするとHTMLコードが表示されてしまいます。
その後も、1分間隔くらいで更新されていてるみたいな動きをします。HTMLコードが表示されるようになってしまった原因が
わからずに困っております。
ログイン直後の画面
1分くらい後の画面
各機能は正常に機能します。
画面をクリックするとログイン直後の画面になりますが、また1分後くらいにHTMLコードが表示されます。
ログイン後のコマンドプロンプトに表示されたコード
Started GET "/" for 10.0.2.2 at 2017-08-30 01:51:50 +0000 Processing by Staff::TopController#index as HTML Parameters: {"host"=>"chibi.example.com"} StaffMember Load (0.6ms) SELECT `staff_members`.* FROM `staff_members` WHERE `staff_members`.`id` = 11 LIMIT 1 Rendering staff/top/dashboard.html.erb within layouts/staff Rendered staff/top/dashboard.html.erb within layouts/staff (1.1ms) (1.2ms) SELECT COUNT(*) FROM `messages` WHERE `messages`.`type` IN ('CustomerMessage') AND `messages`.`status` = 'new' AND `messages`.`deleted` = 0 Rendered staff/shared/_header.html.erb (75.2ms) Rendered shared/_footer.html.erb (0.9ms) Completed 200 OK in 426ms (Views: 407.3ms | ActiveRecord: 13.9ms)
HTMLコードが表示されたときにコマンドプロンプトに表示されたコード(これが1分間隔で繰り返し更新されていってます。
Started GET "/" for 10.0.2.2 at 2017-08-30 01:52:51 +0000 Processing by Staff::TopController#index as */* Parameters: {"host"=>"chibi.example.com"} StaffMember Load (1.5ms) SELECT `staff_members`.* FROM `staff_members` WHERE `staff_members`.`id` = 11 LIMIT 1 Rendering staff/top/dashboard.html.erb within layouts/staff Rendered staff/top/dashboard.html.erb within layouts/staff (1.1ms) (0.6ms) SELECT COUNT(*) FROM `messages` WHERE `messages`.`type` IN ('CustomerMessage') AND `messages`.`status` = 'new' AND `messages`.`deleted` = 0 Rendered staff/shared/_header.html.erb (4.3ms) Rendered shared/_footer.html.erb (0.5ms) Completed 200 OK in 307ms (Views: 300.3ms | ActiveRecord: 2.0ms)
ヘッダー部分に「新規問い合わせ」リンクがあり、1分ごとに新規問い合わせ件数を調べてヘッダーを更新するCoffeeScriptプログラムを
作りました。これが利いて更新されているのだと思います。
app/assets/javascripts/staff/messages.js.coffee $(document).on 'turbolinks:load', -> if $('#number-of-unprocessed-messages').length setInterval(update_number_of_unprocessed_messages, 1000 * 60) update_number_of_unprocessed_messages = -> $.get window.path_for("count_staff_messages"), (data) -> $('#number-of-unprocessed-messages').text "(#{data})"
出力されているHTMLコードにカーソルを当てると「新規問い合わせ」リンクのHTMLコードが出力され、更新されているみたいです。
機能的には問題が無いのでただ、HTMLコードが表示されなければ問題は無いのですが、どこを修正すればいいのか
わからないので、どなたか教えていただけませんでしょうか?
ファイルの量が多すぎて特定できないのですが、routs.rbが悪さしているのか、controllerなのか、viewなのか、modelなのか
それともjavaScriptなのか、このような現象はどこのファイルが原因なのでしょうか?教えてください。
宜しくお願いします。
追記:
countアクションを追加
app/controllers/staff/messages_controller.rb class Staff::MessagesController < Staff::Base before_action :reject_non_xhr, only: [ :count ] def index @messages = Message.where(deleted: false).page(params[:page]) end # GET def inbound @messages = CustomerMessage.where(deleted: false).page(params[:page]) render action: 'index' end # GET def outbound @messages = StaffMessage.where(deleted: false).page(params[:page]) render action: 'index' end # GET def deleted @messages = Message.where(deleted: true).page(params[:page]) render action: 'index' end #GET def count render text: CustomerMessage.unprocessed.count end def show @message = Message.find(params[:id]) end def destroy message = CustomerMessage.find(params[:id]) message.update_column(:deleted, true) flash.notice = '問い合わせを削除しました。' redirect_back(fallback_location: root_path) end # POST/DELETE def tag message = CustomerMessage.find(params[:id]) if request.post? message.add_tag(params[:label]) elsif request.delete? message.remove_tag(params[:label]) else raise end render text: 'OK' end end
CutomerMessageモデルにunprocessedスコープを定義する。
app/models/customer_message.rb class CustomerMessage < Message scope :unprocessed, -> { where(status: 'new', deleted: false) } end
ヘッダ部分に「新規問い合わせ」リンクを表示するためのヘルパーメソッドnumber_of_unprocesser_messagesを定義。
app/helpers/staff_helper.rb module StaffHelper include HtmlBuilder def number_of_unprocessed_messages markup do |m| m.a(href: inbound_staff_messages_path) do m << '新規問い合わせ' if (c = CustomerMessage.unprocessed.count) > 0 anchor_text = "(#{c})" else anchor_text = '' end m.span(anchor_text, id: 'number-of-unprocessed-messages') end end end end
ヘッダにリンクを設置。
app/view/staff/shared/_header.html.erb <header> <%= link_to 'CHIBI', :staff_root, class: 'logo-mark' %> <%= content_tag(:span, flash.notice, class: 'notice') if flash.notice %> <%= content_tag(:span, flash.alert, class: 'alert') if flash.alert %> <%= if current_staff_member link_to 'ログアウト', :staff_session, method: :delete else link_to 'ログイン', :staff_login end %> <%= link_to 'アカウント', :staff_account if current_staff_member %> <%= number_of_unprocessed_messages if current_staff_member %> </header>
ルーティングで定義されるヘルパーメソッドをapp/assetsディレクトリにあるファイルの中で使えるようにする。
config/initializers/assets.rb Rails.application.config.assets.precompile += %w( staff.css admin.css customer.css staff.js admin.js customer.js ) Sprockets::Context.send(:include, Rails.application.routes.url_helpers)
CoffeeScriptに対して擬似的なグローバル変数を提供する。
app/assets/javascripts/staff/paths.js.coffee.erb window.named_paths = [] <% %w(count_staff_messages tag_staff_message).each do |name| %> <% route = Rails.application.routes.named_routes[name] %> <%= "window.named_paths['#{name}'] = '#{route.path.spec.left.to_s}'\n" %> <% end %> window.path_for = (name, ids = {}) -> path = window.named_paths[name] for key, id of ids path = path.replace(new RegExp(":#{key}\\b"), id) path
関連すると思われるコードを追記しました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/30 08:06
2017/08/30 08:11
2017/08/30 09:30