2012-10-06 60 views
0

我目前有一個用戶系統設置2個模型 - >計劃模型has_many用戶。屬性不在PUT請求更新

我想實現的是一種允許用戶升級/降級計劃的方法。爲此,我在控制器中創建了一個名爲「update_plan」的POST動作,並且當用戶向其發佈新的Plan_id時,比用戶的plan_id更改,因此將訂閱不同的計劃。

當我POST到更新計劃控制器時,雖然用戶的plan_id沒有更改。我首先要到控制檯,並做

user = User.find(1) 
user.plan.id 

當檢查plan_id的數據類型,第二次驗證了這一點,沒有任何變化。

這裏是我的形式看起來像改變計劃ID

     <%= form_tag("https://stackoverflow.com/users/update_plan", :method => "post") do %> 

         <%= hidden_field_tag :plan_id, plan.id %> 

         <%= submit_tag("Change To Plan", :class => "signup") %> 


         <% end %> 

而這裏的更新行動計劃,在用戶控制器

def update_plan 
    @user = current_user 
    if @user.update_attributes(params[:plan_id]) 
     flash[:success] = "Profile updated" 
     sign_in @user 
     redirect_to change_plan_path 
    else 
     render change_plan_path 
     flash[:errors] = "Oops, something went wrong with the Update. Please Talk To Support" 
    end 
    end 

我不太清楚錯誤所在,雖然,因爲我在上面寫的核心中不太確定。

如何更新用戶的plan_id參數?任何幫助極大讚賞

+1

我想你需要做'@ user.update_attributes(params)' – bdares

回答

4

@user.update_attributes(params[:plan_id])將不會按照您的預期方式更新用戶。 update_attributes需要包含與模型的列名匹配的鍵的哈希。

要更新一列,試試這個:

@user = current_user 
@user.plan_id = params[:plan_id] 
@user.save 

另一種方式,是通過update_attributes哈希與plan_id的數據類型(假設plan_id可以大量分配):

@user.update_attributes({:plan_id => params[:plan_id]}) 
+0

嗨邁克爾,感謝您對此的更新。我已經實施了您的更改,但plan_id中的更改仍未註冊。我認爲可能有另一個問題阻止它保存到數據庫。它可能是提交給錯誤的操作。您對此的想法將不勝感激 –