【问题标题】:Rails find_by new columnRails find_by 新列
【发布时间】:2020-06-10 06:30:57
【问题描述】:

我是 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

谢谢

【问题讨论】:

  • 你使用的是什么版本的 Rails?
  • attr_accessible 与查找器或声明属性无关 - 它是一种旧的且已被贬低的批量分配保护方式。 ActiveRecord 根据数据库模式生成动态查找器。

标签: ruby-on-rails ruby-on-rails-3.2


【解决方案1】:

您的数据库中似乎没有usercontrol_id 1,这就是它抛出undefined method id for nilClass 错误的原因。您需要在控制器中以某种方式处理它,例如我重定向到 root_path 以防查询返回 nil

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

希望有帮助!

【讨论】:

  • 我正在使用 rails 3.2 , find_by(control_id: 1) 也抛出未定义的方法错误
  • 有没有办法使用find_by_column_name?
  • 您可以添加代码来显示您正在编写的完整查询吗?
  • 添加了代码,我需要使用 control_id 找到 id,然后我将在另一个表中添加输出 id
  • @Eswar 看起来数据库中没有具有特定control_id 的用户。您需要在代码中处理它。检查我更新的答案。
【解决方案2】:

想知道在哪里可以工作?

User.where(control_id: 3)

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

User.find_by(control_id: 3)

你总是可以先user = User 然后pp user.methods 这将显示所有可用的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多