如何在具有本地的页面上多次渲染相同的部分

时间:2015-10-13 17:54:14

标签: ruby-on-rails twitter-bootstrap partials

在我的应用程序中,我有一个笔记的概念......在页面上,我用编辑按钮列出所有笔记。此编辑按钮打开一个用于编辑音符的模态。这一切都很有效,除了一个大问题。如果我有5个音符,当我单击第一个编辑按钮时,它会按预期编辑第一个音符...但是,如果我单击第二个编辑按钮,它还会编辑第二个音符的第一个音符INSTEAD。相同的第三个,等等。基本上无论我点击什么编辑按钮我总是编辑第一个音符。

用户控制器

def show
   @user = User.find(params[:id])
   @notes = @user.notes.order('created_at DESC')
end 

索引页

<% @notes.each do |note| %>
  <td><%= note.body %></td>
  ........
  <td>
     <%= button_tag text, class: "btn btn-primary", data: {toggle: "modal", target: "#edit_note"} %>
     <%= render partial: "edit_note_modal", locals: { note: note } %>
  </td>
<% end %>

注意模态

<div class="modal fade" id="edit_note" tabindex="-1" role="dialog" aria-labelledby="edit_note" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h4 class="modal-title">Edit Note</h4>
      </div>
      <div class="modal-body">
        <%= form_for note do |f| %>
          <div class="form-group">
            <label for="keyword">Keyword</label>
            <%= select_tag :keyword, options_for_select(<SOME FUNCTION>, selected: note.keyword ), class:"form-control" %>
          </div>
          <div class="form-group">
            <label for="body">Body</label>
            <%= text_area_tag :body, note.body , class:'form-control' %>
          </div>
          <div class="modal-footer">
            <%= submit_tag "Update Note", class: "btn btn-primary" %>
          </div>
        <% end %>
      </div>
    </div>
  </div>
</div>

1 个答案:

答案 0 :(得分:1)

那是因为你使用相同的ID和ID应该是uniq所以当它在索引页面中搜索ID时,一旦它点击了第一个具有该ID edit_note的Note,它就会打开它,你可以做什么每个视图具有不同的ID,如下所示:

索引页:

<%= button_tag text, class: "btn btn-primary", data: {toggle: "modal", target: "#edit_note_#{note.id}"} %>

注意模态:

<div class="modal fade" id="edit_note_#{note.id}" tabindex="-1" role="dialog" aria-labelledby="edit_note" aria-hidden="true">

注意ID现在是edit_note_#{note.id}并且编辑按钮尝试打开具有相同目标的模型edit_note_#{note.id}