アプリケーションコントローラには、アプリケーションレイアウトメニューの通知と通知アイコンを設定するためのメソッドがあります。アプリケーションレイアウトアイコンの更新
def set_notifications
if user_signed_in?
@notifications = Notification.where(user_id: current_user.id)
@notifications.each do |n|
if n.read == false
return @icon_path = 'notification-alert-icon'
end
end
@icon_path = 'notification-icon'
end
end
私は未読の通知を持っているとき、私は正しい通知アイコンを取得するように、これは正常に動作します:私はbefore_actionでこのメソッドを実行
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><%= image_tag(@icon_path) %></a>
<ul class="dropdown-menu">
<% if @notifications == 0 %>
<li class="text-center" style="color:white;">Você ainda não tem notificações</li>
<% else %>
<% @notifications.each do |n| %>
<li><%= link_to n.question.title, question_path(n.question), class: 'text-center' %></li>
<% end %>
<% end %>
<li role="separator" class="divider"></li>
<li><%= link_to 'Ver todas as notificações', "#" %></li>
</ul>
</li>
ユーザーが通知アイコンをクリックし、質問をクリックする彼questions_controllerが(showアクション内)の読み取りとその通知をマークし、上の通知を受けた:
notifications = Notification.where(question_id: question.id) if Notification.exists?(question_id: question.id)
if notifications
notifications.each do |notification|
if notification.user_id == current_user.id
notification.read = true
notification.save
end
end
end
私は何をすることができていないことである:どのように私は更新されます@通知を通知としてマークした後、アプリケーションレイアウト上の通知オブジェクトと通知アイコンをクリックしますか?私はメソッドset_notificationsを呼び出すことができますが、それだけでアプリケーションのレイアウトをリロードせずにアイコンを変更することはできません。
私に答える時間をとってくれてありがとう!最初にページにアクセスすると、アプリケーションコントローラが実行され、アプリケーションのレイアウトが正しくレンダリングされますか?リンクをクリックして別のコントローラ/アクションに行くと、アプリケーションコントローラが再び実行され、アプリケーションレイアウトが再びレンダリングされるというわけではありません。私はリンクをクリックし、レールはquestions_controller#showを実行すると、前にロードされたアプリケーションレイアウト内でshow.html.erbだけでなくアプリケーションレイアウトを含むレイアウト全体を再ロードすることは可能ですか?それとも、jsを使う必要があるということですか? – Rob
Railsのデフォルトの動作は、一般的にHTTPのような要求/応答です。 'セッション '、データベース、またはディスク上のファイルに残っているもの以外に、Rails側の状態は保持されません。各ページのリクエストは、新しいコントローラインスタンスと、インスタンス変数まできれいなスレートから始まります。 「レイアウトをリロードする」とはどういう意味ですか?各ページリクエストは毎回ゼロから実行されます。 – tadman
それで、もし私がリンクをクリックすると、<%= link_to 'question'、question_path(question)%>、 があると、レールはアプリケーションコントローラの新しいインスタンスと質問コントローラの新しいインスタンスを実行しますか? – Rob