繁体   English   中英

Rails中的update.js需要第二次提交

[英]update.js in Rails needs second submit

我在Rails上遇到了一个很小的问题(确实很小)。

一个remote:true更新表单(调用update.js.erb)需要两次提交而不是一次提交才能正确刷新视图。

def update
@user = User.find(params[:id])
if @user.update_attributes(update_user_params)
  respond_to do |format|
    format.html {
      flash[:success] = "Votre profil a été mis à jour."
      redirect_to @user
    }
    format.js
  end
else
  render 'edit'
end

结束

这是视图代码(我正在使用方法:'put',因为我是从主页而不是edit.html调用它的,但是即使没有它,问题仍然存在):

<%= form_for @user, html: { multipart: true }, remote: true, method: 'put' do |f| %>
  <%= f.label :location, 'Ville', class: 'popover-title' %>
  <%= f.select :location, cities_options %>
  <%= f.submit "Valider", class: 'btn-addon' %>
<% end %>

这是我在提交时看到的内容:

Started PUT "/users/101" for 127.0.0.1 at 2015-08-19 15:25:05 +0200
Processing by UsersController#update as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"hZMd5usgyZVgY4DxqNp0PxF8JPvRk/V+WAGTjFLhj8rqS0y1UCbzbQ9e7HYH20oNdn3TK6FXrLgeDXYnrZeVIg==", "user"=>{"location"=>"Paris"}, "commit"=>"Valider", "id"=>"101"}
User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 101]]
User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 101]]
CACHE (0.0ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", "101"]]
(0.0ms)  begin transaction
User Exists (0.1ms)  SELECT  1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('andrey.soloviev.s@gmail.com') AND "users"."id" != 101) LIMIT 1
SQL (0.3ms)  UPDATE "users" SET "location" = ?, "lat" = ?, "lng" = ?, "updated_at" = ? WHERE "users"."id" = ?  [["location", "Paris"], ["lat", 48.856614], ["lng", 2.3522219], ["updated_at", "2015-08-19 13:25:05.511789"], ["id", 101]]
(2.2ms)  commit transaction
Rendered users/update.js.erb (0.1ms)
Completed 200 OK in 208ms (Views: 4.6ms | ActiveRecord: 2.9ms)

最后,这是update.js.erb:

$('.location-name').html('<%= current_user.location %>');

Basic Rails js,与众不同。 上面的代码告诉我,一切似乎都正常运行。 但是,在提交时,update.js使用数据库中的旧值(在新值之前的旧值)刷新位置。 仅在第二次提交时,我才能看到正确的值出现。

如果有人有任何想法或解决方案,我将永远感激不已。

谢谢大家!

我假设current_user是控制器上的帮助器方法,我想它已被缓存。 将其切换到您更新的用户对象。 $('.location-name').html('<%= @user.location %>');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM