PUT请求中的属性未更新

时间:2012-10-06 13:06:26

标签: ruby-on-rails ruby

我目前的用户系统设置有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的参数?任何帮助非常感谢

1 个答案:

答案 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]})