Mysql 为登录用户保存记录时,用户ID为空
我开始学习rails,遇到了一个问题。我正在编写一个简单的应用程序(类似于我看到的twitter教程),其中用户登录并创建一个新帖子 当用户登录时,我设置会话信息如下Mysql 为登录用户保存记录时,用户ID为空,mysql,ruby-on-rails,session,activerecord,Mysql,Ruby On Rails,Session,Activerecord,我开始学习rails,遇到了一个问题。我正在编写一个简单的应用程序(类似于我看到的twitter教程),其中用户登录并创建一个新帖子 当用户登录时,我设置会话信息如下 session[:id] = authorized_user.id session[:email] = authorized_user.email 现在我有了登录用户的ID。登录后,用户将进入一个表单,在该表单中他们可以提交一篇新文章(3个字段)。当用户单击“提交”时,我想用他们输入的数据创建一个新记录,并将该记
session[:id] = authorized_user.id
session[:email] = authorized_user.email
现在我有了登录用户的ID。登录后,用户将进入一个表单,在该表单中他们可以提交一篇新文章(3个字段)。当用户单击“提交”时,我想用他们输入的数据创建一个新记录,并将该记录与该用户(用户ID)相关联。我不知道该怎么做
以下是控制器上的代码:
def create
#Used for creating new status posts
#Need to get the ID of the user logged in
@user = AdminUser.find(session[:id])
#Instantiate new object using form parameters
@post = Post.new(post_params)
@post.AdminUser = @user # THIS IS THE LINE NOT WORKING
#Save the object
if @post.save
#If save succeeds, redirect to the index action
flash[:notice] = "Status has been saved"
redirect_to(:action => 'index')
else
#If the save fails, redisplay the form so user can fix problems
render('new')
end
end
下面是post_参数的私有方法
def post_params
#Defining the params that are allowed to be passed with forms.
params.require(:post).permit(:post_status, :post_title, :post_content)
end
记录已保存,但记录的用户ID为空
我的第一个建议是尝试将UserID作为post参数传递,但我认为这是一个潜在的安全风险,所以我正在尝试找出另一种方法。我相信这是一件简单的事情,我只是错过了它 像这样重写该行,将
UserID
作为posts
表中的列名
@post.UserID = @user.id
属性 首先,
@post.AdminUser = @user # THIS IS THE LINE NOT WORKING
您应该使用(您正在使用的)属性名。调用属性AdminUser有各种潜在的问题,这些问题会随之出现
称之为admin\u user
或admin\u id
或类似的名称
--
参数
第二,
我想用他们输入的数据创建一个新记录,然后
将记录与该用户关联(用户ID)
如果您试图保存对象的“相关”记录(例如,为用户保存post
),则必须自己分配用户id
记录,并通过参数传递,如下所示:
#app/controllers/posts_controller.rb
Class PostsController < ApplicationController
def create
@post = Post.new(post_params)
@post.save
end
private
def post_params
params.require(:post).permit(:title, :body).merge({user_id: authorized_user.id})
end
end
从上面的示例可以看出,您基本上需要能够通过user\u id
/admin\u id
/AdminUser
值发送到模型(这样它可以保存)
也可以通过如下示例设置属性来完成此操作:
#app/controllers/posts_controller.rb
def create
@post = Post.new(post_params)
@post.user_id = authorized_user.id
@post.save
end
private
def post_params
params.require(:post).permit(:title, :body, :user_id)
end
--
您还应该查看以获得登录用户对象的更好定义:)您的Post
模型中是否有user\u id
属性?Post models admin\u user和Post还可以发布提交表单时生成的日志,授权用户的定义在哪里?谢谢Pavan-这绝对是我认为最适合这个问题的!是的!。是的。OP不应该像UserID
@rich peck那样使用CamelCase
——非常感谢您提供的信息。发布后不久,我确实将行改为:@post.admin\u user\u id=@user
它不起作用。正如RSB所建议的,我需要在行中添加.id。不管怎样,我试图像你提到的那样改变这种情况,但是我得到了未定义的变量/方法错误。AdminUsers是表名,所以在CamelCase中引用它是否仍然不正确?此外,我将尝试其他方法来实现这一点,您也发布了这些方法。我感谢所有的投入。但愿我能把两个答案都标为正确。
#app/controllers/posts_controller.rb
def create
@post = Post.new(post_params)
@post.user_id = authorized_user.id
@post.save
end
private
def post_params
params.require(:post).permit(:title, :body, :user_id)
end