0

我有大约 60 个字段的单一形式的用户属性,通过在一个页面上切换隐藏的 div 来单独显示。更新其他人的个人资料时,所有字段都会按预期更新。更新当前登录的配置文件 (current_user) 时,只有大约 40 个字段会更新。这是我在 current_user 配置文件的更新方法上观察到的内容:

当直接在@user = User.find(params[:id]) 之后设置断点并查看传递的参数时,60 个表单字段参数中只有大约 40 个存在。存在的会按预期更新,显然不存在的不会更新。

关于可能导致这种奇怪行为的任何线索?

示例:users/_form.erb 上许多行为不端的表单字段之一

<%= f.text_field :street_address, :placeholder => 'address..'  %>

users_controller.rb 中的更新方法

# UPDATE
  def update   
    @user = User.find(params[:id])
    breakpoint_set = on_this_line
    respond_to do |format|     
      if @user.update_attributes params[:user]
        format.html do
          redirect_to("/users", :notice => 'User Profile was successfully updated.')
          format.xml  { head :ok }
        end
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
      end
    end
  end
4

2 回答 2

2

如果“当前登录的用户”只是一个User对象,那么我怀疑您看到了缓存的副作用。

如果您有两个表示同一记录的 Active Record 对象,并且它们在该记录的状态应该是什么方面存在分歧,则可能会发生不同类型的问题。例如;

@u1 = User.find logged_in_user_id
@u2 = User.find logged_in_user_id

@u1.update_attributes :username => "root"

@u2.username   # old username
@u2.reload
@u2.username   # "root"

确保这不会发生在您身上。

于 2012-05-05T08:09:58.347 回答
1

检查参数是否从客户端移植到控制器。您可以在 Firefox + Firebug 控制台中查看。

并检查每个参数是否都在用户哈希下,因为丢失的参数可能不在同一个用户哈希中(Rails 控制器正在查看)。

于 2012-05-05T08:18:48.557 回答