【问题标题】:How to destroy/delete a Rails Active Record without an id column?如何销毁/删除没有 id 列的 Rails Active Record?
【发布时间】:2019-04-09 07:25:22
【问题描述】:

有没有办法在没有id 列的情况下销毁表中的 Rails Active Record 条目? 我知道有几种方法可以使用ids 销毁 Active Record,如下所示:

User.destroy(1)
User.first.destroy

但是,如果没有id,我似乎无法找到这样做的方法。我检查了this link 中的建议,但无济于事。 理想情况下,我的想法是这样的:

User.where(name: "Dummy").destroy
# Returns this:
# ArgumentError (wrong number of arguments (given 0, expected 1))

我知道通常不鼓励在 Rails 中创建没有id 列的表。如果可能的话,我想为这个特定的表删除它,但如果事实证明没有解决方法,我愿意制作该列。提前致谢。

【问题讨论】:

  • 旁注...当您运行查询并且您期望有一条记录时,您可以在关系上调用.first 来获取它。 @Marek 的答案就是您在这里寻找的。​​span>

标签: ruby-on-rails activerecord destroy


【解决方案1】:

User.where(name: 'Dummy').destroy 不起作用的原因是User.where(name: 'Dummy') 是一个关系,而不是一条记录。例如,如果你想销毁所有name等于'Dummy'的记录,你可以使用destroy_all

User.where(name: 'Dummy').destroy_all

【讨论】:

  • User.find_by(name: 'Dummy').destroy。 Find_by 返回一条记录
  • 怎么样,比如说,User.find_by(name: 'Dummy').to_a
  • @Marek Lipka 谢谢!出于某种原因,在我的情况下,User.where(name: 'Dummy').destroy_allUser.find_by(name: 'Dummy').destroy 都返回了这个错误:PG::SyntaxError: ERROR: zero-length delimited identifier at or near """" 但是,这有效:User.where(name: 'Dummy').delete_all
  • @MarekLipka 当我尝试to_a 时,我得到了NoMethodError (undefined method 'to_a')。不知道为什么delete_all 有效,而destroy_all 无效。
【解决方案2】:

如果要删除列,可以使用

User.find_by_name(name: "dummy").destroy

【讨论】:

  • 点评来源: 嗨,这篇文章似乎没有为问题提供quality answer。请编辑您的答案并改进它,或者将其作为对问题/其他答案的评论发布。
猜你喜欢
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 2011-02-28
相关资源
最近更新 更多