首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails中has_many关系之一的选择

问Rails中has_many关系之一的选择
EN

Stack Overflow用户
提问于 2016-11-22 10:57:19
回答 1查看 934关注 0票数 3

Rails中的特定模型从has_many关系中选择特定记录的首选方法是什么?(我使用的是Rails 5。)

我有一个模型User和一个模型Picture,它们通过以下代码关联:

代码语言:javascript
复制
class User < ApplicationRecord
  has_many :pictures, as: :imageable
  # ...
end

class Picture < ApplicationRecord
  belongs_to :imageable, polymorphic: true
  # ...
end

我想要做的是允许User从与它相关的图像中设置配置文件图片,这样我就可以在User对象上调用@user.profile_picture并检索配置文件图片。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-22 11:16:34

你可以增加一对一的关系。

代码语言:javascript
复制
# create by running:
# rails g migration AddPrimaryPictureToUser
class AddPrimaryPictureToUser < ActiveRecord::Migration[5.0]
  def change
    add_column :users, :primary_picture_id, :integer
    add_index :users, :primary_picture_id
    add_foreign_key :users, :pictures, column: :primary_picture_id
  end
end
代码语言:javascript
复制
class User < ApplicationRecord
  has_many :pictures, as: :imageable
  # This should be belongs_to and not has_one as the foreign key column is 
  # on the users table
  belongs_to :primary_picture, 
             class_name: 'Picture',
             optional: true
end


class Picture < ApplicationRecord
  belongs_to :imageable, polymorphic: true
  has_one :primary_user, 
          foreign_key: 'primary_picture_id',
          class_name: 'User'
  # ...
end

这样做的主要原因是,例如,在pictures表中有一个布尔标志可以使连接变得容易,这对于避免N+1查询是很重要的,如果您将一群用户与他们的主映像一起列出,这是一个问题。

代码语言:javascript
复制
@users = User.includes(:primary_picture).all
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40740044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档