我正在尝试在我正在运行的测试应用中使用best_in_place gem。虽然best_in_place gem已安装并且在页面加载时没有出错(例如,html加载等),但在HTML视图中通过“输入”框修改用户参数后,单击Enter似乎存在问题。用户输入框似乎没有更新到我的数据库中。
我的观点:
<%= best_in_place @user, :name %>
<%= best_in_place @user, :name, activator: "#edit_#{@user.id}", display_with: :link_to,
helper_options: user_path(@user) %>
<small><a href="#" id="edit_<%= @user.id %>">edit</a></small>
我的用户控制器:
def edit
@user = User.find(params[:id])
end
def update
@user = User.find params[:id]
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to(@user, :notice => 'User was successfully updated.') }
format.json { respond_with_bip(@user) }
else
format.html { render :action => "edit" }
format.json { respond_with_bip(@user) }
end
end
end
尝试在服务器上运行时终端输出脚本
Started PUT "/users/108" for 127.0.0.1 at 2013-09-24 15:26:14 +0530
Processing by UsersController#update as JSON
Parameters: {"user"=>{"name"=>"ap"}, "authenticity_token"=>"3d/ZtW3csCIqXWG5Qk1U2QjMlyTQZ5W9/tBnVNZlHY8=", "id"=>"108"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'VJ-EiGLCCGtqjPhuebTbZQ' LIMIT 1
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "108"]]
CACHE (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "108"]]
(0.1ms) begin transaction
User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('b@b.com') AND "users"."id" != 108) LIMIT 1
(0.1ms) rollback transaction
Completed 422 Unprocessable Entity in 347ms (Views: 0.4ms | ActiveRecord: 1.7ms)
理想情况下,我期望在上面的代码中的begin transaction之后有一个UPDATE“users”SET ........语句。你知道为什么我的代码在这种情况下不更新用户参数吗?
答案 0 :(得分:0)
JS .purr文件显示验证错误消息。 如果您使用的是Rails 4,请将其包含在application.js文件中,如下所示:
//= require best_in_place
//= require best_in_place.purr
而不是
//= require jquery.purr
如Rails Cast视频中所示:http://railscasts.com/episodes/302-in-place-editing?view=asciicast
希望有所帮助!
答案 1 :(得分:0)
我不知道你的@user(我会假设有一些与之相关的身份验证,并且有它自己的怪癖和影响),但是我发现我的模型中的validates_numericality_of对一个我不能的变量验证阻止我保存。一旦我评论出来,它就救了。我和你之前的确有同样的错误。