2012-05-05 36 views
0

我有一个单一形式的用户属性约60个字段,通过在一个页面上切换隐藏div单独显示。更新其他人的个人资料时,所有字段均按预期进行更新。更新当前登录的配置文件(current_user)时,只有大约40个字段会更新。这是我正在观察current_user配置文件的更新方法:红宝石Rails只有一些参数传递给控制器​​

当在@user = User.find(params [:id])之后直接设置断点并查看传入的参数时,只有大约40个out 60表单字段参数甚至存在。那些目前正在更新的,并且显然不存在的不会更新。

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

示例:用户/ _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 
+0

是您的示例代码中的类型? <%= @ .text_field ...? –

+0

这是一个错字,我将它改为f。但不幸的是,这不是问题。 – iamtoc

+0

我试图无效的其他事情是在所有字段上使用attr_accessible并重新启动服务器。我有点想法。 – iamtoc

回答

1

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

并检查每个参数是否在用户散列下,因为缺少的参数可能不会出现在相同的用户散列(Rails控制器正在查看)中。

+0

指向我这个方向导致了决心。发生的事情是通过在用户表单中呈现局部的<%= render:partial =>'users/address'%>来嵌套表单。尽管这种形式需要成为其他地方使用的形式,但我在我所做的地方渲染是不恰当的。 – iamtoc

+0

@iamtoc,很高兴帮助:D – sameera207

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" 

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

+0

事实证明,这不是问题,但你提出了一个我从未想到的有趣场景。考虑到我的一些代码,将这个场景放在光照中特别有趣,因为我可能会遇到这种情况。感谢你! – iamtoc