我目前的用户系统设置有2个型号 - >计划模型has_many用户。
我想要实现的是允许用户升级/降级他们的计划的方法。为此,我在控制器中创建了一个名为“update_plan”的POST操作,当用户向其发送新的Plan_id时,用户的plan_id将会更改,因此将订阅另一个计划。
当我POST到Update-plan控制器时,虽然用户的plan_id没有改变。我通过进入控制台验证了这一点,然后进行了
user = User.find(1)
user.plan.id
第二次检查plan_id时,没有任何变化。
以下是我的表单更改计划ID
的样子 <%= form_tag("/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的参数?任何帮助非常感谢
答案 0 :(得分:4)
@user.update_attributes(params[:plan_id])
不会以您期望的方式更新用户。 update_attributes
需要一个包含与模型列名匹配的键的哈希。
要更新单个列,请尝试以下操作:
@user = current_user
@user.plan_id = params[:plan_id]
@user.save
另一种方法是使用plan_id传递update_attributes
哈希值(假设plan_id
可以进行质量分配):
@user.update_attributes({:plan_id => params[:plan_id]})