Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从两个相同的数据库中仅获取一个db记录?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何从两个相同的数据库中仅获取一个db记录?

Ruby on rails 如何从两个相同的数据库中仅获取一个db记录?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在db表中有记录,这些记录只能因ID和创建/更新时间而有所不同。我怎样才能得到唯一的记录? 我试过这种方法,但没有成功: msg_to_user = user.messages.new_messages.uniq 我会解释的。用户可以手动跟踪帖子,也可以自动跟踪同一帖子。所以我只想发送一条消息,如果有人评论了这篇文章 1747 test message TamadaTours 12 new 2016-01-29 06:14:04.736869 2016-01-29 06:48

我在db表中有记录,这些记录只能因ID和创建/更新时间而有所不同。我怎样才能得到唯一的记录? 我试过这种方法,但没有成功:

msg_to_user = user.messages.new_messages.uniq
我会解释的。用户可以手动跟踪帖子,也可以自动跟踪同一帖子。所以我只想发送一条消息,如果有人评论了这篇文章

1747    test message    TamadaTours 12  new 2016-01-29 06:14:04.736869  2016-01-29 06:48:55.948529  32964382
1748    test message    TamadaTours 12  new 2016-01-29 06:14:04.741184  2016-01-29 06:48:55.951371  32964382

数据库中的所有记录都是uniq(至少因为ID列,默认情况下它有uniq约束)

您可能希望使用:


数据库中的所有记录都是uniq(至少因为ID列,默认情况下它有uniq约束)

您可能希望使用:


您也可以像这样在查询中使用GROUPBY

Model.all.group("column_name")

您也可以像这样在查询中使用GROUPBY

Model.all.group("column_name")

一种提取数据的方法,但要摆脱ORM上下文

# maps every record to hash, remove the ID entry and then removes duplicates
msg_to_user = user.messages.new_messages.attributes.map { |e| e.except('ID') }.uniq

一种提取数据的方法,但要摆脱ORM上下文

# maps every record to hash, remove the ID entry and then removes duplicates
msg_to_user = user.messages.new_messages.attributes.map { |e| e.except('ID') }.uniq

你的问题有缺陷

拥有
id
。。。也被称为。。。在关系数据库中,您可以主动识别所需的唯一的记录:

主键唯一地指定表中的元组。为了使属性成为良好的主键,它不能重复


当你写。。。“我怎样才能得到唯一的记录”。。。答案是只根据记录的
id
提取记录

如果你把你的问题细化到你真正想要的

如果帖子被人评论过,我只想发送一条消息

--

换句话说,您希望提取一组唯一的
用户ID
(无重复项),以便向其发送新消息

要做到这一点,您可以使用

@recipients = Message.select(:user_id).distinct #-> all unique user_ids
如果您试图为用户拉取“新”消息,但仅显示第一条消息(如果它们相同),则需要使用以下内容:

@msg_to_user = user.messages.new_messages.uniq(:title)


更好的实现模式是验证新消息的唯一性:

#app/models/message.rb
class Message < ActiveRecord::Base
   validates :user_id, uniqueness: { scope: :message_id } #-> replace message_id with other unique identifier
end
#app/models/message.rb
类消息用其他唯一标识符替换message_id
结束

这将确保用户只收到一条新消息。

您的问题有缺陷

拥有
id
。。。也被称为。。。在关系数据库中,您可以主动识别所需的唯一的记录:

主键唯一地指定表中的元组。为了使属性成为良好的主键,它不能重复


当你写。。。“我怎样才能得到唯一的记录”。。。答案是只根据记录的
id
提取记录

如果你把你的问题细化到你真正想要的

如果帖子被人评论过,我只想发送一条消息

--

换句话说,您希望提取一组唯一的
用户ID
(无重复项),以便向其发送新消息

要做到这一点,您可以使用

@recipients = Message.select(:user_id).distinct #-> all unique user_ids
如果您试图为用户拉取“新”消息,但仅显示第一条消息(如果它们相同),则需要使用以下内容:

@msg_to_user = user.messages.new_messages.uniq(:title)


更好的实现模式是验证新消息的唯一性:

#app/models/message.rb
class Message < ActiveRecord::Base
   validates :user_id, uniqueness: { scope: :message_id } #-> replace message_id with other unique identifier
end
#app/models/message.rb
类消息用其他唯一标识符替换message_id
结束

这将确保用户只显示一条新消息。

由于ID值不同,记录不相等。这是ORM的有效透视图。如果您只需要知道除ID以外的字段,则使用具有DISTINCT的自定义SELECT。由于ID值不同,记录不相等。这是ORM的有效透视图。如果您只需要知道除ID以外的字段,则使用带有DISTINCT的自定义SELECT。使用
.all
是一个非常糟糕的主意。如果您确实只想获得一条记录,则甚至不需要使用DISTINCT/grouping,只需使用.first就可以了。使用
.all
是一个非常糟糕的主意。如果你真的只想得到一条记录,你甚至不需要使用distinct/grouping,只需使用.first就可以了。但是如果我想得到记录的所有字段呢?
模型。选择('distinct comment\u id,group\u id')
-它只会返回这两个字段,我说得对吗?但我需要这个记录的所有字段。它可以是几个具有相同注释ID和组ID的记录,但我只需要一个!准确地说,所以只需选择所有列(
Model.select('DISTINCT comment\u id,group\u id',all\u other\u columns)
),DISTINCT将确保在column@nobilik不可能:)
msg\u to\u user=user.messages.new\u messages.select(:所有所需\u非唯一\u字段).distinct
它以这种方式工作,并提供我所需的信息。据我所知,不可能同时选择唯一值和不同的非唯一值。干杯,你的回答对我有帮助!但是如果我想获取记录的所有字段呢?
Model.select('DISTINCT comment\u id,group\u id')
-它将只返回这两个字段,对吗?但我需要这个记录的所有字段。它可以是几个具有相同注释ID和组ID的记录,但我只需要一个!准确地说,所以只需选择所有列(
Model.select('DISTINCT comment\u id,group\u id',all\u other\u columns)
),DISTINCT将确保在column@nobilik不可能:)
msg\u to\u user=user.messages.new\u messages.select(:所有所需\u非唯一\u字段).distinct
它以这种方式工作,并提供我所需的信息。据我所知,不可能同时选择唯一值和不同的非唯一值。干杯,你的回答对我有帮助!此刻,另一个答案为我做了工作。但你的答案是正确的