首页 > 解决方案 > 使用引导模式形式编辑对象(Ruby On Rails)

问题描述

我正在使用 AJAX 为组做一个模态表单,想法是我单击表中的编辑按钮来编辑该特定对象。当我单击编辑按钮时,它不显示模态表单

groups.html.erb

<table class="table table-striped table-bordered table-hover dataTables-example" >
   <thead>
      <tr>
         <th>Name</th>
         <th>Phone</th>
         <th>Action</th>
      </tr>
   </thead>
   <tbody>
       <% @groups.each do |g| %>
           <tr class="gradeC">
               <td><%= g.name%></td>
               <td><%= g.phone%></td>
               <td>
                  <div class="btn-group">
                     <%= link_to 'Edit', edit_group_path(g),  {:remote => true, 'data-toggle' =>  "modal", 'data-target' => '#edit-group', class: 'btn-white'}  %>
                  </div>
               </td>
           </tr>

         </tbody>
     <% end %>
</table>

    <div id="edit-group" class="modal hide fade" aria-hidden="true">
    <div class="modal-dialog modal-md">
    <div class="modal-content">
    <div class="modal-body">
        <%= render partial: 'form' %>
    </div>
    </div>
    </div>

_form.html.erb

    <div id="edit">
    <div class="row">
    <div class="col-sm-12"><h3 class="m-t-none m-b">Edit group</h3>
    </div>
    </div>
    <%= form_for @group, url: groups_path, remote: true do |f| %>
    <div class="form-group row">
    <div class="col-sm-6">
    <label>Name</label> 
        <%= f.text_field :name, class:"form-control"%> 
    </div>
    <div class="col-sm-5">
    <label>Phone</label> 
        <%= f.text_field :phone, class:"form-control"%> 
    </div>
    </div>

    <%= f.submit "Submit", id:"submit", class: 'btn btn-primary btn-lg float-right'%>
    </div>
    <% end %>
    </div>
    </div>
    </div>
    </div>

_edit.js.erb

$('.modal-body').html("<%= escape_javascript( render partial: 'form', locals: {group: @group} ) %>")

$('#edit-group').modal()

_update.js.erb

$('#edit-group').modal('toggle');
$('#group_<%= @group.id %>').replaceWith('<%= j render (@group) %>')

组控制器。

class GroupsController < ApplicationController
    def groups 
        @group = Group.new
        @group = Group.all
    end

    def create
        @group = Group.new(group_params)
        if @group.save
          flash[:success] = "Group successfully added"
          redirect_to :groups => 'post', :action => 'groups'
        else
          flash[:error] = "Something went wrong"
          render 'group'
        end
    end

    def edit
      @group = Group.find(params[:id])
      format.js
    end

    def update
      respond_to do |format|
        format.html
        format.js
        if @group.update(group_params)
          redirect_to :groups => 'post', :action => 'groups'
        end
      end
    end

    private
    def group_params
        params.require(:group).permit(:name, :phone)
    end

end

我尝试在 javascript 文件中执行 console.logs 以确保它们至少正在尝试执行,但我在控制台中什么也没有,猜测它们由于某种原因没有执行,它们在我的视图文件夹中

标签: ruby-on-railsajax

解决方案


在您的 _edit.js.erb 中将最后一行修改为:

$('#edit-group').modal('show');

另外,单击编辑链接后您得到的响应是什么?在 shell 上查看正在运行的服务器,然后单击编辑链接。看看你得到的错误是什么。

我可以假设它应该是 edit.js.erb 而不是 _edit ...另外请确保您在 _edit.js.erb 中提供正确的部分位置路径

render partial: 'form'

推荐阅读