如何在rails中将current_user添加到user_id到form_for?

Fin*_*jon 13 ruby-on-rails form-for

我有一个用于创建材料的表单(标题,描述和内容 - 所有基础).表单保存这些细节很好,但它不保存user_id,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
Run Code Online (Sandbox Code Playgroud)

Arp*_*nav 12

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
Run Code Online (Sandbox Code Playgroud)


Pet*_*own 5

根据您的应用程序设置方式,有几种不同的方法可以做到这一点。如果用户和材料之间存在关系(用户有很多材料),您可以在控制器中使用它:

def create
  @material = current_user.materials.new(params[:material])
  # ...
end
Run Code Online (Sandbox Code Playgroud)

如果您没有这种关系,我仍然建议在控制器中设置它,而不是在表单中设置隐藏字段。这将更安全,因为它不会让某人篡改用户 ID 值:

def create
  @material = Material.new(params[:material].merge(user_id: current_user))
  # ...
end
Run Code Online (Sandbox Code Playgroud)