Rails find_by新列

Rails find_by new column

提问人:Eswar 提问时间:2/26/2020 最后编辑:Eswar 更新时间:2/26/2020 访问量:259

问:

我是rails的新手,

我在表 users 中添加了一个新列“control_id”,并在模型文件中添加了相同的列

attr_accessible :control_id

但是当我使用 find_by_control_id(1) .我收到未定义的方法错误。我需要在其他地方添加该列吗?

法典:

search_id = User.find_by_control_id(1).id

在webhook中我将得到control_id,我需要使用control_id在users表中查找id

谢谢

Ruby-on-Rails Ruby-on-Rails-3.2

评论

0赞 Rajdeep Singh 2/26/2020
您使用的是哪个版本的 Rails?
0赞 max 2/26/2020
attr_accessible与查找器或声明属性无关 - 它是一种旧的且过时的大规模分配保护方式。ActiveRecord 根据数据库架构生成动态查找器。

答:

1赞 Rajdeep Singh 2/26/2020 #1

看起来您的数据库中不存在 1,这就是它解冻错误的原因。您需要在控制器中以某种方式处理它,例如我正在重定向到root_path以防查询返回。usercontrol_idundefined method id for nilClassnil

search_id = User.find_by_control_id(1).try(:id)
redirect_to root_path if search_id.nil?

希望对您有所帮助!

评论

0赞 Eswar 2/26/2020
我正在使用 rails 3.2 ,find_by(control_id: 1) 也抛出未定义的方法错误
0赞 Eswar 2/26/2020
有没有办法使用find_by_column_name?
0赞 Rajdeep Singh 2/26/2020
您能否添加代码来显示您正在编写的完整查询?
0赞 Eswar 2/26/2020
添加了代码,我需要使用control_id找到id,然后我会在另一个表中添加输出id
0赞 Rajdeep Singh 2/26/2020
@Eswar看起来数据库中不存在具有该特定用户的用户。您需要在代码中处理它。检查我更新的答案。control_id
0赞 Pav 2/26/2020 #2

想知道在哪里工作?

User.where(control_id: 3)

User.find_by(control_id: params[:control_id]) 

User.find_by(control_id: 3)

您可以随时这样做,这将向您显示所有可用的方法。user = Userpp user.methods