jQuery: добавление соответствующей структуры в DOM (Rails 4)

#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, которая отображает страницу показа уведомлений. Но вы не показали маршрут. По сути, ни один из ваших показанных вами кодов на самом деле не отображает страницу показа.