我有部分_navigation.html.erb
,其中有这段代码:
<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
部分中呈现用户名:
<strong class="font-bold"><%= user.name %></strong>
当我登录时,我会按预期在导航部分中看到我的current_user
名称。但是,当我尝试更新用户名(模态窗口)时,我看不到current_user
部分_user.html.erb
值的变化。
我的users_controller.rb
更新操作如下所示:
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
看起来像这样:
$('#dialog').modal('toggle');
$('#userprofile %>').replaceWith('<%= j render (@user) %>')
我在控制台中清楚地看到更新操作已完成,我的文件已呈现,没有错误:
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
名称会很高兴。我会很高兴任何提示,我应该在哪里看。谢谢。
答案 0 :(得分:1)
在update.js.erb
,你有一个错字。您应该删除%>
。试试这个:
$('#userprofile').replaceWith('<%= j render (@user) %>')
此外,您可能希望更改其中的html而不是替换整个#userprofile节点:
$('#userprofile').html('<%= j render (@user) %>')