如何使用Ajax自动更新用户名字段?

时间:2014-04-10 16:32:38

标签: jquery ruby-on-rails ajax ruby-on-rails-4

因此,在我的应用程序中,用户可以使用the best in place gem更改其个人资料中的用户名,但是在text_field中更改用户名时,不会在current_user.username字段中更新用户名,直到我刷新为止。

以下是当前设置的相关代码:

 <div class="users_about_fullinfo">
            <h3><%= current_user.name %>  <small>(<%= current_user.username %>)</small></h3>
            <p class="edit-about-text">
              <%= best_in_place current_user, :username, activator: ".edit-username", nil: 'Click here to edit your username', inner_class: 'form-control', ok_button: 'Save', ok_button_class: 'btn btn-default btn-xs creat-event blurb-ok', cancel_button: 'Cancel', cancel_button_class: 'btn btn-default btn-xs cencel-event blurb-cancel' %>
              <span class="edit-icon edit-username"></span>
            </p>
          </div>
          <div class="clr"></div>

理想情况下,我希望它能够工作,以便当用户更新他/她的用户名时,current_user.username字段也会在现场更新,而无需刷新。我怎么能这样做?

干杯!

1 个答案:

答案 0 :(得分:0)

我从未使用过best_in_place gem,但它似乎提供了一种方法来定义自己在成功编辑时发生的操作:

https://github.com/bernat/best_in_place#ajax-success-callback

要解决您的问题,您应该在要更改的字段中包含用户名,以便您可以从javascript访问它:

<%= best_in_place @user, :name, :data => {:user_name => @user.name}, :classes => 'username-field' %>

然后为成功回调添加一个javascript处理程序:

$('.username-field').bind("ajax:success", function(){
    $('.username-in-the-header').text($(this).data('userName'));
});