2012-05-05 37 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