0

現在、2 つのモデルを使用してユーザー システムをセットアップしています --> プラン モデルには、多くのユーザーがいます。

私が実装したいのは、ユーザーがプランをアップグレード/ダウングレードできるようにする方法です。これを行うために、「update_plan」というコントローラーで POST アクションを作成しました。ユーザーが新しい Plan_id をそれに POST すると、ユーザーの plan_id が変更されるため、別のプランにサブスクライブされます。

ユーザーの plan_id は変更されませんが、Update-plan コントローラーに POST すると。コンソールに移動してこれを確認し、

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

2回目に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

もう1つの方法は、update_attributesplan_idを使用してハッシュを渡すことです(plan_id一括割り当てが可能であると想定)。

@user.update_attributes({:plan_id => params[:plan_id]})
于 2012-10-06T13:12:14.747 に答える