如何不仅获取单个记录,而且获取属于特定搜索查询的所有记录

约翰·史密斯

我写了这个搜索查询,只返回一条记录:

 @messages = Message.find_by_sender_username(@user.username)

 #<Message id: 1, sender_username: "emmanuel", reciepent_username: "elias", body: "Die erste Nachricht", gelesen: "", created_at: "2013-10-26 11:17:53", updated_at: "2013-10-26 11:17:53"> 

尽管在我的消息模型中,我有两个记录,其中有sender_username“ emmanuel”

 #<Message id: 1, sender_username: "emmanuel", reciepent_username: "elias", body: "Die erste Nachricht", gelesen: "", created_at: "2013-10-26 11:17:53", updated_at: "2013-10-26 11:17:53"> 
 #<Message id: 2, sender_username: "emmanuel", reciepent_username: "vera", body: "Was soll ich dazu sagen", gelesen: "", created_at: "2013-10-26 11:23:57", updated_at: "2013-10-26 11:23:57">

我认为问题在于模型之间没有真正的关系:

管理员用户名:string

用户名:string

信息

sender_username:string

reciepent_username:字符串

身体:弦

阅读:布尔值

MyQuestion是我应该如何在此模型之间编写关系,我为这种关系表达了​​一些关于forgein_key的信息,但我不是100%确定如何利用它!

理查德·派克

Rails通过一种称为ActiveRecord的技术使用关系数据库这是一种SQL,基本上可以让您通过一系列关系“链接”表:

belongs_to
has_one
has_many
has_many :through
has_one :through
has_and_belongs_to_many

链接表的方式取决于建立关系的方式,但是在这种情况下,您将使用以下方式:

Ruby on Rails-两次引用同一模型?

#app/models/message.rb
has_one :sender, :class_name => 'User', :foreign_key => 'sender_id'
has_one :recipient, :class_name => 'User', :foreign_key => 'recipient_id'


#app/models/user.rb
has_many :sent_messages, :class_name => 'Message', :foreign_key => 'sender_id'
has_many :received_messages, :class_name => 'Message', :foreign_key => 'recipient_id'

您必须编辑表以使每个关系具有外键列。您已经完成了这一步,但是您需要知道外键始终是ID。因此,您不必使用sender_usernamesender_id

这是因为主键始终是唯一的ID,这意味着该ID可用于标识其他表中记录的关联。这意味着您将能够在执行的任何查询中引用记录


这将允许您执行以下操作:

@messages = @user.received_messages

不必弄乱100个不同的查询


更新资料

多态协会

如果您想将管理员消息添加到组合中,则需要添加polymorphic association

class Message < ActiveRecord::Base
  belongs_to :sendable, polymorphic: true
  belongs_to :receiveable, polymorphic: true
end

class Admin < ActiveRecord::Base
  has_many :sent_messages, :class_name => 'Message', as: :sendable
  has_many :received_messages, :class_name => 'Message', as: :receiveable
end

class User < ActiveRecord::Base
  has_many :sent_messages, :class_name => 'Message', as: :sendable
  has_many :received_messages, :class_name => 'Message', as: :receiveable
end

我不知道此代码是否可以立即使用,但是绝对可以为您指明正确的方向。它的工作方式是给您foreign_key一个associated model,这意味着您可以区分是管理员还是用户发送了邮件。

这意味着,如果您调用@messages = @user.received_messages,ActiveRecord将自动对进行ping操作Message model,并在receiveable_id = user.idreceiveable_type = User


为此,您需要用4列替换sender_username和Receiver_username:

sendable_id
sendable_type

receiveable_id
receiveable_type

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在一次查询中获取特定记录的总和和所有记录的总和?

来自分类Dev

如何获取特定sobject记录的所有附件的列表?

来自分类Dev

CloudKit:获取具有特定记录类型的所有记录?

来自分类Dev

如何获取所有父记录的所有记录

来自分类Dev

如何从Aerospike中获取所有记录?

来自分类Dev

如何获取所有记录的计数

来自分类Dev

根据特定列排序后如何获取除前5条记录以外的所有记录

来自分类Dev

使用 XML PATH 在 mysql 的单个记录中获取特定帖子的所有标签

来自分类Dev

如何获取具有特定ID的记录?

来自分类Dev

如何获取带有剩余记录的特定记录?

来自分类Dev

如何获取带有剩余记录的特定记录?

来自分类Dev

如何使用灵活的搜索查询获取最新记录?

来自分类Dev

获取所有DNS记录

来自分类Dev

有没有办法在单个查询中获取ActiveRecord Rails中数组条件的所有最后记录

来自分类Dev

Qt:如何获取属于特定班级的所有班级

来自分类Dev

如何使用Laravel从Twitter API获取所有可用的用户搜索记录

来自分类Dev

SQL查询Informix以获取上个月的所有记录

来自分类Dev

SQL查询以获取总和小于10000的所有记录

来自分类Dev

获取所有重复的记录,而不仅仅是它们的列表

来自分类Dev

获取属于其他记录的记录

来自分类Dev

从特定行开始,从2列获取所有记录

来自分类Dev

获取所有计数超过特定数量的记录

来自分类Dev

编写单个Rails活动记录查询以通过与两个表关联来获取所有项?

来自分类Dev

如何在WordPress查询中获取所有分类类别的记录?

来自分类Dev

DynamoDB查询| 如何获取按最新时间戳排序的所有记录?

来自分类Dev

如何使用查询从 azure cosmos db 中获取所有记录

来自分类Dev

使用特定搜索从多表中获取记录

来自分类Dev

MySQL-如何从所有记录中获取特定值的计数

来自分类Dev

如何使用Strophe存档插件获取到特定日期的所有聊天记录?

Related 相关文章

  1. 1

    如何在一次查询中获取特定记录的总和和所有记录的总和?

  2. 2

    如何获取特定sobject记录的所有附件的列表?

  3. 3

    CloudKit:获取具有特定记录类型的所有记录?

  4. 4

    如何获取所有父记录的所有记录

  5. 5

    如何从Aerospike中获取所有记录?

  6. 6

    如何获取所有记录的计数

  7. 7

    根据特定列排序后如何获取除前5条记录以外的所有记录

  8. 8

    使用 XML PATH 在 mysql 的单个记录中获取特定帖子的所有标签

  9. 9

    如何获取具有特定ID的记录?

  10. 10

    如何获取带有剩余记录的特定记录?

  11. 11

    如何获取带有剩余记录的特定记录?

  12. 12

    如何使用灵活的搜索查询获取最新记录?

  13. 13

    获取所有DNS记录

  14. 14

    有没有办法在单个查询中获取ActiveRecord Rails中数组条件的所有最后记录

  15. 15

    Qt:如何获取属于特定班级的所有班级

  16. 16

    如何使用Laravel从Twitter API获取所有可用的用户搜索记录

  17. 17

    SQL查询Informix以获取上个月的所有记录

  18. 18

    SQL查询以获取总和小于10000的所有记录

  19. 19

    获取所有重复的记录,而不仅仅是它们的列表

  20. 20

    获取属于其他记录的记录

  21. 21

    从特定行开始,从2列获取所有记录

  22. 22

    获取所有计数超过特定数量的记录

  23. 23

    编写单个Rails活动记录查询以通过与两个表关联来获取所有项?

  24. 24

    如何在WordPress查询中获取所有分类类别的记录?

  25. 25

    DynamoDB查询| 如何获取按最新时间戳排序的所有记录?

  26. 26

    如何使用查询从 azure cosmos db 中获取所有记录

  27. 27

    使用特定搜索从多表中获取记录

  28. 28

    MySQL-如何从所有记录中获取特定值的计数

  29. 29

    如何使用Strophe存档插件获取到特定日期的所有聊天记录?

热门标签

归档