Редактировать объект Modal Ruby on Rails - PullRequest
0 голосов
/ 17 октября 2019

Да, я пытаюсь сделать модал, с помощью которого я могу редактировать заметку.

Но когда я нажимаю на кнопку редактирования. Он открывает модальное окно, но отображает только информацию первой заметки, даже нажимая на другую заметку, всегда перенаправляет меня на редактирование первой заметки таблицы.

Я не могу понять это.

Вот мой индексный просмотр

  <table class="table mt-5">
    <thead>
      <tr>
        <th><p>Titulo</p></th>
        <th><p>Conteudo</p></th>
        <th><p>Data</p></th>
        <th><p>Prioridade</p></th>
        <th></th>
        <th></th>
      </tr>
    </thead>

    <tbody>
      <% current_user.notes.each do |n| %>
      <tr>
        <td><%= n.title %></td>
        <td><%= n.content %></td>
        <td><%= n.date %></td>
        <td><%= n.priority %></td>
        <td> <%= link_to "Editar", edit_note_path(n), class: "btn btn-outline-warning",data: { toggle: "modal", target: "#EditNote", whatever: "@getbootstrap"} %></td>
        <td><%= link_to "Apagar", note_path(n), method: :delete, data: { confirm: 'Tem certeza ?' }, class: "btn btn-outline-danger" %>
        </td>
      </tr>
      <div class="modal fade" id="EditNote"  tabindex="-1" role="dialog" aria-labelledby="EditingNote"  aria-hidden="true">
        <div class="modal-dialog" role="document">
          <div class="modal-content">
          <div class="modal-header">
            <h5 class="modal-title" id="CreatingNote">Editar Anotação</h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Fechar">
              <span aria-hidden="true">&times;</span>
            </button>
          </div>
            <div class="modal-body">
              <%= simple_form_for n do |f| %>
                  <%= f.input :title, label: "Title", placeholder: "Title" %>
                  <%= f.input :content, placeholder: "Escreve aqui" %>
                  <%= f.input :date %>
                  <%= f.input :priority, :collection => %w[Baixa Média Alta] %>
            </div>
            <div class="modal-footer">
                <%= f.submit "Editar", class: "btn btn-warning btn-block" %>
              <% end %>
            </div>
          </div>
        </div>
      </div>
      <% end %>
    </tbody>
  </table>

Вот мой контроллер

class NotesController < ApplicationController
  before_action :set_note, only: %w[edit update destroy]

  def index
    @notes = Note.all
    @note = Note.new
  end

  def new
    @note = Note.new
  end

  def create
    @note = Note.new(note_params)
    @note.user = current_user
    if @note.save
      redirect_to notes_path
      flash[:alert] = "Anotação salva"
    else
      flash[:alert] = "Tenta de novo"
      render :new
    end
  end

  def edit
  end

  def update
    @note.update(note_params)
    redirect_to notes_path
  end

  def destroy
    @note.destroy
    redirect_to notes_path
  end

  private

  def set_note
    @note = Note.find(params[:id])
  end

  def note_params
    params.require(:note).permit(:title, :content, :date, :priority, :user_id)
  end
end

1 Ответ

1 голос
/ 17 октября 2019

Каждый модал имеет идентификатор #EditNote. И каждая ссылка для редактирования имеет:

data: { toggle: "modal", target: "#EditNote", whatever: "@getbootstrap"}

Итак, я полагаю, что щелчок - независимо от того, какую ссылку вы нажимаете - всегда показывает первый модал с идентификатором #EditNote, который всегда является модальным дляпервое примечание

Возможно, попробуйте:

data: { toggle: "modal", target: "#editNote#{n.id}", whatever: "@getbootstrap"}

... и:

<div class="modal fade" id="editNote#{n.id}"  tabindex="-1" role="dialog" aria-labelledby="EditingNote"  aria-hidden="true">

Чтобы каждый модал имел уникальный id и каждая ссылка указывала на этот уникальный id.

Кстати, похоже, что использование link_to на самом деле не нужно, поскольку вы ничего не делаете в действии контроллера, но, вероятно, оно также не приносит никакого вреда. Это просто ненужный цикл запрос-ответ.

...