gpt4 book ai didi

ruby-on-rails - 在 Rails 中选择一个 has_many 关系

转载 作者:行者123 更新时间:2023-12-05 05:22:18 24 4
gpt4 key购买 nike

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

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

class User < ApplicationRecord
has_many :pictures, as: :imageable
# ...
end

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

我想做的是允许 User 从与之关联的图像中设置个人资料图片,这样我就可以在 @user.profile_picture 上调用 User 对象并检索个人资料图片。

最佳答案

您可以添加额外的一对一关系。

# 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

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 表上的 bool 标志相比,这样做的主要原因是拥有单独的关系使得连接变得容易,这对于避免 N+1 查询很重要如果您列出一群用户及其主要图片,则会出现问题。

@users = User.includes(:primary_picture).all

关于ruby-on-rails - 在 Rails 中选择一个 has_many 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40740044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com