13

資料を作成するためのフォームがあります(タイトル、説明、およびコンテンツ-すべて基本)。フォームはこれらの詳細を問題なく保存しますが、user_id を保存しません。これは current_user の user_id である必要があります。どうすればいいですか?簡単なはずですが、これまでのところ何も機能していません。

def create 
   @material = Material.new(params[:material])
   if @material.save
     flash[:success] = "Content Successfully Created"
     redirect_to @material
   else
     render 'new'
   end
end
4

4 に答える 4

13
def create 
 @material = Material.new(params[:material])
 @material.user_id = current_user.id if current_user
 if @material.save
  flash[:success] = "Content Successfully Created"
  redirect_to @material
 else
  render 'new'
 end
end
于 2012-10-06T12:19:36.590 に答える
5

アプリケーションのセットアップ方法に応じて、いくつかの異なる方法があります。ユーザーとマテリアルの間に関係がある場合 (ユーザーは多くのマテリアルを持っています)、コントローラーでそれを使用できます。

def create
  @material = current_user.materials.new(params[:material])
  # ...
end

その関係がない場合でも、フォームの非表示フィールドではなく、コントローラーに設定することをお勧めします。これにより、誰かがユーザー ID の値を改ざんできないため、より安全になります。

def create
  @material = Material.new(params[:material].merge(user_id: current_user))
  # ...
end
于 2012-10-06T12:19:26.657 に答える
2

ログインユーザーのオブジェクトをcurrent_user次のように保存していると仮定すると、うまくいくでしょう

   @material = Material.new(params[:material])
   @material.user_id = current_user.id
   if @material.save
于 2012-10-06T12:19:03.440 に答える