我有一个创建材料的表单(标题,描述和内容-都是基本的)。表单可以很好地保存这些详细信息,但不会保存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发布于 2012-10-06 20:19:37
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-06 20:19:27
有几种不同的方法可以做到这一点,这取决于您如何设置您的应用程序。如果用户和材质之间存在关系(用户有许多材质),则可以在控制器中使用该关系:
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-06 20:19:03
假设您正在将登录用户的对象保存在current_user中,则可以使用以下命令
@material = Material.new(params[:material])
@material.user_id = current_user.id
if @material.savehttps://stackoverflow.com/questions/12759683
复制相似问题