2

ユーザーモデルとプロファイルモデルの2つのモデルがあります。私は次のように関係を設定しました:

class User
  has_one :profile
end

class Profile
  belongs_to :user
end

新規作成編集と更新の 4 つのアクションを持つプロファイル コントローラーがあります。ユーザーがサインアップまたはログインすると、プロファイル コントローラーの New アクションにリダイレクトされます。ここから、そのユーザーのプロファイルを作成するにはどうすればよいですか? 具体的には、新しいアクションと作成アクションに何を含める必要がありますか。現在、新しいアクションのルートは、ユーザーのパラメーターをキャプチャしないプロファイル/新規のみです。私はこれをやろうとしていますが、失敗しています。

プロフィールコントローラー

def new
    @user = User.find(params[:id])
    @profile = @user.build_profile
  end

  def create
    @profile = current_user.build_profile(params[:profile])
    if @profile.save
      redirect_to current_user
    else
      render new
    end
  end
4

2 に答える 2

2

プロファイルコントローラのアクションは、パラメータからユーザーのnewを取得する必要はありません。idしたがって、コントローラーは次のようになります

def new
  @user = current_user
  @profile = @user.build_profile
end

def create
  @profile = current_user.build_profile(params[:profile])
  if @profile.save
    redirect_to current_user
  else
    render new
  end
end

実際にidユーザーのをアクションに送信すると、別のユーザーのを送信してシステム内の他のユーザーのプロファイルを作成newできるため、セキュリティホールになる可能性がありますが、これは許可されるべきではありません。id

于 2012-12-29T17:52:40.187 に答える
2

User.find(params[:id]新しいアクションで使用するべきではありません。

以下の作成アクションと同様に、Userを通過する必要がありますcurrent_user

正しくフェッチできないこと以上の問題がありUserますか?

于 2012-12-29T17:53:00.093 に答える