Rails 5:更新操作不适用于AJAXified表单

马蒂斯

我有带下拉菜单的视图,可以在其中选择用户,可以编辑特定的用户角色。

/common/roles/index.erb中,我有以下内容:

<form class="form-horizontal" role="form" method="get" action="/common/roles" data-remote="true">
<div class="col-sm-10"><select class="form-control m-b" name="users" id="user_list">
  <option value="">Please, select user</option>
     <% @users.each do |user| %>
        <% for role in user.roles %>
           <option value="<%= role.id %>"><%= user.name %></option>
        <% end %>
     <% end %>
  </select>
</div>
</form>
<!-- Here we render role edit form -->
<div id = 'selected_role' ></div>
<!-- Role edit form ends -->

选择显示用户名的位置,角色ID为选项值。

roles.js中,我有一个侦听器,在该侦听器中,将选择角色ID传递给Edit:

(function($) {
$('#user_list').change(function() {
  var roleId = $( "#user_list" ).val();
  $.ajax({
    url: '/common/roles/' + roleId + '/edit',
    method: 'GET',
  });
});
})(jQuery); /*global jQuery*/

/common/roles/edit.js.erb看起来像这样:

$("#selected_role").html("<%=j render 'common/roles/editrole', locals: { role: @role } %>");

并且呈现角色编辑的部分/common/roles/_editrole.html.erb

<%= form_for :role, method: :patch, remote: true do |f| %>
<form class="m-t" role="form" action="" id="editrole">
        <div class="form-group">
            <label class="col-sm-2 control-label">General</label>
            <div class="col-sm-10" >
           <%= f.select :general, Role.generals.to_a.map { |w| [w[0].humanize, w[0]] }, {}, {class:"form-control m-b"} %>
            </div>
        </div>
   <%= f.submit "Save changes", class: "btn btn-primary block full-width m-b" %>
  <% end %>
</form>

要完成此表单,我仍然需要在出现问题的地方执行“更新”操作。提交角色编辑表单后,它将启动PATCH,但带有Edit url。这是控制台中的错误:

Started PATCH "/common/roles/1/edit"
ActionController::RoutingError (No route matches [PATCH] "/common/roles/1/edit"):

尽管有特定的PATCH路线:

common_role PATCH  /common/roles/:id(.:format)     common/roles#update

/common/roles_controller.rb中,我有这个:

def update
@role = Role.find(params[:id])
if @role.update_attributes(role_params)
respond_to do |format|
  format.html {
              flash[:success] = "Role updated!"
              redirect_to common_roles_path
  }
  format.js

/common/roles/update.js.erb中,我有这行:$('.editrole').hide()

我可以在“编辑”中打开表单,直到“更新”操作正常为止。请问如何解决“更新操作”错误?


更新解决方案

在更新操作中,我缺少了respond_to do |format|+ /common/roles/update.js.erb,我不得不更改为:

$('.container').empty().append('<%=
  escape_javascript(
    render 'update'
  )
%>')
阿伦·库马尔·莫汉(Arun Kumar Mohan)

试试这个。

<%= form_for role, url: common_role_path(role), method: :patch, remote: true do |f| %>

role 这里指的是您在渲染局部变量时传递的局部变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails编辑/更新操作不适用于嵌套项目

来自分类Dev

Rails编辑/更新操作不适用于嵌套项目

来自分类Dev

Rails:嵌套的远程表单不适用于页面加载

来自分类Dev

Rails-布局不适用于所需的操作

来自分类Dev

Rails 5:发布路由不适用于根 url

来自分类Dev

视差不适用于Rails

来自分类Dev

ReactJS渲染不适用于Rails

来自分类Dev

Bootstrap scrollspy不适用于Rails

来自分类Dev

视差不适用于Rails

来自分类Dev

Ajax 请求不适用于 rails 中的控制器操作

来自分类Dev

FriendlyID历史记录不适用于Rails中更新的模型URL

来自分类Dev

顶部栏下拉菜单不适用于Rails 4.1和Zurb Foundation 5

来自分类Dev

Geocoder,s gem near 方法不适用于 rails 5

来自分类Dev

Rails异常不适用于find_by查询

来自分类Dev

jQuery插件不适用于Rails 4

来自分类Dev

Rails命名范围不适用于关联

来自分类Dev

jquery-datatables-rails gem不适用于表

来自分类Dev

React useEffect挂钩不适用于Rails

来自分类Dev

Lazyload不适用于无限滚动-Ruby on Rails

来自分类Dev

Rails 4 JSON属性类型不适用于Postgres

来自分类Dev

jQuery重定向不适用于Rails每个循环

来自分类Dev

Rails 4:模型验证不适用于创建

来自分类Dev

Rails 4强参数不适用于多态关联

来自分类Dev

CORS发布不适用于Rails应用

来自分类Dev

Rails计算值不适用于复选框

来自分类Dev

CSV种子不适用于Rails数据库

来自分类Dev

Rails-回形针不适用于AWS

来自分类Dev

简单搜索不适用于 rails 应用程序

来自分类Dev

Rails.cache.fetch 不适用于 json 数组