0

我目前有一个设置了 2 个模型的用户系统 --> 计划模型 has_many 用户。

我想实现的是一种允许用户升级/降级他们的计划的方法。为此,我在控制器中创建了一个名为“update_plan”的 POST 操作,当用户向其发布新的 Plan_id 时,用户的 plan_id 会发生变化,因此会订阅不同的计划。

当我发布到更新计划控制器时,尽管用户的 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 的参数?非常感谢任何帮助

4

1 回答 1

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]})
于 2012-10-06T13:12:14.747 回答