我在rails API中有两个模型(页面和图像),它们之间存在多对多关系。我希望能够在我的Page模型中的两个(最终更多)位置引用Image模型(通过image_ids:[])。
我想要一个"图片库"数组和特色图像"要返回的数组,我有什么画廊现在应该工作,但我正在努力了解从哪里去。这甚至可能吗?
我觉得这不应该像我一样复杂,所以我真的很感激任何帮助 - 我是一个非常新的开发人员和新的rails。 这就是我想要的:
"id": 34,
"title": "Test Page Gallery",
"featured_image": [
"images": [
{
"id": 12,
"title": "test img 2",
"image": {
"url": "/uploads/medium/image/11/image2.jpeg"
}
]
],
"images": [
{
"id": 11,
"title": "test img 1",
"image": {
"url": "/uploads/image/image/11/image1.jpeg"
}, ....
]
这就是我得到的:
"id": 34,
"title": "Test Page Gallery",
"featured_image": "[]",
"images": [
{
"id": 11,
"title": "test img 1",
"image": {
"url": "/uploads/image/image/11/image.jpeg"
}, ....
]
强烈的参数:
def page_params
params.permit(:title, image_ids:[], featured_image: [image_ids:[]])
end
页面模型:
class Page < ApplicationRecord
belongs_to :user
has_and_belongs_to_many :images, class_name: "Image", join_table: "images_pages"
end
我将featured_image列定义为字符串,但我知道这可能是错误的。提前谢谢!
答案 0 :(得分:0)
我会说你有两种方法之一:
1)有两个单独的关联,指定featured_images
的{{1}}类名称:
<强> page.rb 强>
has_and_belongs_to_many :images, join_table: "images_pages"
has_and_belongs_to_many :featured_images, class_name: Image, join_table: "featured_images_pages"
2)使用has_many through
关联并在连接表上添加标记,无论图像是否有特色:
<强> page.rb 强>
has_many :images, through: :images_pages
has_many :images_pages
<强> images_pages.rb 强>
class ImagesPages
belongs_to :image
belongs_to :page
scope :featured, -> { where(featured: true) }
end
快速阅读后一种方法here。
我总是喜欢has_many through
关系的灵活性。
玩这些并看看是否有帮助 - 任何问题,让我知道,我会看到我如何定制/扩展:)