我有两个模型-User
和Image
。我还有第三个模型-UsersAndImage
。
有用户。有图像。我希望用户能够向自己添加图像。为此,documentation中清楚地描述了所有内容。
我做到了。这样,一切都很好。
但是问题是我需要向users_and_images
表添加状态:
class UsersAndImage < ApplicationRecord
enum status: {
pending: 0,active: 1,# ...
}
belongs_to :user
belongs_to :image
validates :user,presence: true
validates :image,presence: true
# ...
end
在那之后,我不明白如何在User
模型中进一步描述连接。也就是说,我需要使用状态。
与表的关系描述如下:
class User < ApplicationRecord
# ...
has_many :users_and_images
has_many :images,through: :users_and_images
# ...
end
我需要重写此关系,以便从链接表中按状态进行过滤。例如,该代码为:
user = User.find(1)
user.images
仅显示状态为“有效”的图像。
请告诉我,我该如何实现?
现在我只看到一种方法-这是直接与UsersAndImage
模型一起工作(类似这样):
user = User.find(1)
user.users_and_images.some_scope_with_where.map(&:image)
但是在我看来,这是错误的方法。
也许我需要做这样的事情?
class User < ApplicationRecord
# ...
has_many :users_and_images,-> { where(status: UsersAndImage.statuses[:active]) }
has_many :images,through: :users_and_images
# ...
end
在这种情况下,状态更改应直接在users_and_images
表中。但是获取“过滤后的” images
将照常进行。然后如何使用枚举助手?毕竟,我想将它们用于images
,而不是users_and_images
。如果我想获取所有图像怎么办?
你怎么看?