2012-10-06 7 views
9

私は素材を作成するためのフォームを持っています(タイトル、説明、内容 - すべて基本的です)。フォームはこれらの詳細を保存しますが、current_userのuser_idであるuser_idは保存されません。これはどうすればいいですか?それは簡単でなければならないが、これまでに何も働いていない。user_idにcurrent_userを追加してレールにform_forを追加する方法は?

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

答えて

10
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 
+0

ありがとうございます。それは素晴らしいことです。 – Finnjon

2

current_userでログインユーザーのオブジェクトを保存していると仮定すると、あなたのため

@material = Material.new(params[:material]) 
    @material.user_id = current_user.id 
    if @material.save 
3

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

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

あなたがその関係を持っていない場合、私はまだコントローラでそれを設定することをお勧めしますフォームの隠しフィールドとは対照的です。うん、私は団体の設定について考えてきた

def create 
    @material = Material.new(params[:material].merge(user_id: current_user)) 
    # ... 
end 
+0

:それは誰かがユーザIDの値を改ざんさせませんので、これはより安全になります。ユーザーは資料を作成しますが、何人かのユーザーが資料を作成し、まだそれに対処したくない時が来る可能性があるため、私は取り返しました。しかし、ありがとう! – Finnjon

関連する問題