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对象上调用@user.profile_picture并检索配置文件图片。
发布于 2016-11-22 11:16:34
你可以增加一对一的关系。
# 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
endclass 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查询是很重要的,如果您将一群用户与他们的主映像一起列出,这是一个问题。
@users = User.includes(:primary_picture).allhttps://stackoverflow.com/questions/40740044
复制相似问题