首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails 5.1:使用AJAX在partial中刷新partial

Rails 5.1:使用AJAX在partial中刷新partial
EN

Stack Overflow用户
提问于 2017-12-20 02:05:42
回答 1查看 351关注 0票数 0

我有部分_navigation.html.erb,其中有这段代码:

代码语言:javascript
运行
复制
<div class="dropdown profile-element">
  <a data-toggle="dropdown" class="dropdown-toggle" href="#">
    <span class="clear">
      <span class="block m-t-xs">
        <div id="userprofile">
          <%= render 'users/user', user: current_user %>
        <b class="caret"></b>
      </div>
      </span>
    </span>
  </a>
  <ul class="dropdown-menu animated fadeInRight m-t-xs">
    <li><%= link_to t('.profile'), edit_user_path(current_user), remote: true %></li>
    <li class="divider"></li>
    <li><%= link_to t('.logout'), logout_path %></li>
  </ul>
</div>

我将此_user.html.erb中的用户名呈现为部分:

代码语言:javascript
运行
复制
<strong class="font-bold"><%= user.name %></strong>

当我登录时,我会像预期的那样在导航部分看到我的current_user名称。但是,当我尝试更新我的用户名(模式窗口)时,我在_user.html.erb partial中看不到我的current_user值更改。

我的users_controller.rb更新操作如下所示:

代码语言:javascript
运行
复制
  def update
    @user.update(user_params)
    respond_to do |format|
      format.json { update_flash }
      format.js { update_flash }
    end
  end

  private

  def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation,
                                 :locale, :menu_role, :psw_change,
                                 {company_ids: []}, {user_group_ids: []})
  end

  def correct_user
    users = User.where(id: helpers.users_all)
    @user = User.find(params[:id])
    redirect_to(errors_path) unless users.include?(@user)
  end

  def update_flash
    flash[:notice] = "#{@user.name.unicode_normalize(:nfkd)
                                  .encode('ASCII', replace: '')} ", t(:updated)
  end

update.js.erb看起来像这样:

代码语言:javascript
运行
复制
$('#dialog').modal('toggle');
$('#userprofile %>').replaceWith('<%= j render (@user) %>')

我在我的控制台中清楚地看到Update操作已经完成,我的文件被渲染,没有错误:

代码语言:javascript
运行
复制
  Rendering users/update.js.erb
  Rendered users/_user.html.erb (0.6ms)
  Rendered users/update.js.erb (8.5ms)
Completed 200 OK in 126ms (Views: 41.1ms | ActiveRecord: 16.0ms)

请问我做错了什么?这将是很好的能够在配置文件中显示更新的current_user名称。如果有任何提示,我会很高兴的,我应该看哪里。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-20 02:23:37

update.js.erb中,你有一个打字错误。您应该删除%>。试试这个:

代码语言:javascript
运行
复制
$('#userprofile').replaceWith('<%= j render (@user) %>')

此外,您可能希望更改其内部的html,而不是替换整个#userprofile节点:

代码语言:javascript
运行
复制
$('#userprofile').html('<%= j render (@user) %>')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47892806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档