#javascript #jquery #ruby #ruby-on-rails-4 #haml
#javascript #jquery #ruby #ruby-on-rails-4 #haml
Вопрос:
У меня есть notification
модель, в которой я перечисляю все уведомления от пользователя.
Кроме того, у меня есть частичное уведомление, которое содержит структуру одного единственного уведомления.
Теперь я хочу отобразить это уведомление частично, когда кто-то нажимает на одно из перечисленных уведомлений.
К счастью, важно, чтобы отображалось это уведомление, на которое пользователь нажал ранее.
Мой код:
Просмотр (Haml)
- if current_user.ordered_notifications.any?
- if current_user.ordered_notifications.unread.exists?
#notifications.amount
= render 'notifications'
- else
#notifications
= render 'notifications'
- else
#notifications
%i.fa.fa-bell
.dropdown-content.dd-notifications.left
.box
.all
%p.smaller.bold.pointer.notifications-popup all notifications
.notification-view
_notification (haml)
= @notification.title #what code is supposed to be here in order to display the correct notification?
_notifications (haml)
- current_user.ordered_notifications.limit(3).each do |notification|
= link_to(update_notifications_user_path(id: notification.id), remote: true) do
= notification.title
Контроллер
def update_notifications
@notification = current_user.ordered_notifications.find(params[:id])
@notification.read = true
@notification.save!
respond_to do |format|
format.html { redirect_to @notification.link }
format.js # render users/update_notifications.js.erb
end
end
jQuery
$('.notification-view').remove();
$('.notification-view').append("<%= j render 'notification' %>");
Комментарии:
1. У вас есть вопрос?
2. @Jordan В коде
_notification
:#what code is supposed to be here in order to display the correct notification?
3. Вы не можете вставить код ERB с помощью Javascript. Это потому, что только ваш сервер может читать код ERB. Обычная последовательность действий заключается в том, что ваш сервер загружает представление / часть, считывает код ERB, превращает его в HTML, затем отправляет его в ваш веб-браузер, а затем ваш веб-браузер запускает Javascript. Если вы хотите использовать Javascript для отображения и исчезновения частичных представлений, вы можете рассмотреть возможность использования интерфейсной платформы, такой как Angular.js .
4. @RobertAKARobin Это совершенно верно, но Rails делает все это автоматически. Я протестировал его, и он полностью работает нормально, если я использую
current_user.ordered_notifications.first. [...]
вместоnotification. [...]
, например. Точка, в которой я изо всех сил пытаюсь взять объект, на который нажал пользователь.5. похоже, что при перенаправлении на
@notification.link
это попадает отдельная конечная точка REST, которая отображает страницу показа уведомлений. Но вы не показали маршрут. По сути, ни один из ваших показанных вами кодов на самом деле не отображает страницу показа.