Rails确定has_many:通过访问额外数据

我们知道,在rails中你可以为你的has_many :through添加额外的属性has_many :through连接模型

我想从连接模型中提取额外的数据并用它填充视图。 我通过直接引用连接模型来实现这一点,但是我想将相关的连接模型数据附加到当前项目,如下所示:

 #app/models/message.rb #Images has_many :image_messages, :class_name => 'ImageMessage' has_many :images, :class_name => 'Image', :through => :image_messages, dependent: :destroy #app/views/messages/show.html.erb  #-> works #app/views/messages/show.html.erb  #-> what I'd like to happen 

具体来说,我需要能够调用特定图像的captioncaption存储在image_messages连接模型中,如下所示:

 #image_messages join table id | message_id | image_id | caption | created_at | updated_at 

从我所看到的,也许可以使用范围,但我不确定

任何帮助将不胜感激! 我想我会问这个问题,因为这是你不经常得到的那个问题之一!

我实际上找到了解决方案

神奇之处在于SQL SELECT语句,我设法在这个RailsCast上找到了它

具体来说,除了标准的SELECT * FROM table ,您还可以定义另一个函数,并使用AS函数将其附加到原始查询

所以我得到的是这段代码:

 #Images has_many :image_messages, :class_name => 'ImageMessage' has_many :images, -> { select("#{Image.table_name}.*, #{ImageMessage.table_name}.caption AS caption") }, :class_name => 'Image', :through => :image_messages, dependent: :destroy 

这允许您将图像的“标题”附加到Image对象,允许您调用@image.caption – 它的工作非常出色!