在rails中两次引用同一个模型

w9apscun  于 2021-06-26  发布在  Mysql
关注(0)|答案(1)|浏览(265)

我在railsapi中有两个模型(页面和图像),它们之间有多对多关系。我希望能够在页面模型的两个(最终更多)位置引用图像模型(通过图像id:[])。
我想要一个“图像画廊”数组和一个“特色图像”数组返回,我有什么将是画廊的工作,因为它应该现在,但我正在努力理解从这里去哪里。这有可能吗?
我觉得这不应该像我所做的那样复杂,所以我真的很感谢任何帮助-我是一个新的开发人员和新的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

我将图像列定义为字符串,但我知道这可能是错误的。提前谢谢!

ukqbszuj

ukqbszuj1#

我想你有两种方法:
1) 有两个独立的关联,指定 Image 的类名 featured_images :
页码.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 关联并在联接表上具有标志,无论图像是否具有特征:
页码.rb

has_many :images, through: :images_pages
has_many :images_pages

图片页面.rb

class ImagesPages
  belongs_to :image
  belongs_to :page

  scope :featured, -> { where(featured: true) }
end

关于后一种方法的快速阅读。
我总是喜欢一个灵活的 has_many through 关系。
玩一玩这些,看看其中一个是否有帮助-如果有任何问题,请告诉我,我将看看如何定制/扩展:)

相关问题