2012-10-06 58 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中的更改仍未注册。我认为可能有另一个问题阻止它保存到数据库。它可能是提交给错误的操作。您对此的想法将不胜感激 –