【问题标题】:How to I select distinct records with ids from a database in Rails?如何从 Rails 的数据库中选择具有 id 的不同记录?
【发布时间】:2014-03-28 06:26:15
【问题描述】:

我正在尝试选择不同的记录来填充选择标签,我需要查询中的 id,但是当我编写这样的查询时:

Topic.select(:name).distinct

返回的结果如下所示:

#<ActiveRecord::Relation [#<Topic id: nil, name: "Ruby">, #<Topic id: nil, name: "Python">, #<Topic id: nil, name: "tingz">, #<Topic id: nil, name: "Javascript">, #<Topic id: nil, name: "Java">]>

为了让我的选择下拉菜单正常工作,我还需要返回相应的 ID

这是我在视图中使用的选择标签:

<%= select_tag :topic_search, options_from_collection_for_select(Topic.select(:name).distinct, :id, :name), placeholder: "Select topic" %>

有没有人知道做这种事情的最佳方法是什么?

【问题讨论】:

  • 你使用的是什么版本的 Rails?

标签: sql ruby-on-rails ruby-on-rails-4 distinct


【解决方案1】:

我想你想要:

Topic.select('distinct on(name) id, name').order(:name)

【讨论】:

【解决方案2】:

对于 Rails 4.x,使用

Topic.select(:id, :name).distinct

注意:

在评论中回答您的问题,即,

不,如果输入了相同的名称,仍然会返回重复值 两次

你不能那样做。假设您在两条记录中有 Python,那么它们将有两个不同的 id(作为其主键)。在这种情况下,您将为不同的 Python 映射哪个 id

【讨论】:

  • @Kirti Thorat 不,如果两次输入相同的名称,仍然返回重复值
  • 你不能那样做。假设您在两条记录中有Python,那么它们将有两个different ids(as its primary key)。在这种情况下,您将为不同的 Python 映射哪个 id?
  • @vee 对我的上述评论有任何想法。
  • @KirtiThorat,当然,我会在示例中使用 Jack 和 Jill :) 我建议提及“In rails 4”,因为该语法在 Rails 3 中不起作用,并且仍然存在巨大Rails 3 用户组。
  • @vee 感谢您的确认 :) 更新了我的答案
【解决方案3】:

刚刚发现解决此问题的一种方法是不使用 Rails 帮助器:

options_from_collection_for_select

改为使用:

options_for_select

并将如下所示的查询语句传入 options_for_select:

<%= select_tag :topic_search, options_for_select(Topic.uniq.pluck(:name)), prompt: "Select topic" %>

这样你传入一个数组就不用担心获取唯一的id了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多