gpt4 book ai didi

ruby-on-rails - 如何使用连接表显示元素列表

转载 作者:太空宇宙 更新时间:2023-11-03 16:42:18 26 4
gpt4 key购买 nike

我有三张表,其中一张是多对多关系表:

class Category < ApplicationRecord
has_many :categorizations
has_many :products, :through => :categorizations
end

class Product < ApplicationRecord
has_many :categorizations, dependent: :destroy
has_many :categories, :through => :categorizations
end

和表格分类:

class Categorization < ApplicationRecord
belongs_to :category
belongs_to :product
end

我将类别 ID 保存在一个数组中:

  def product_params
params.require(:product).permit(:name_product, :hallmark, :description, :image_url, :price, category_ids:[])
end

在 new.html.erb 中:

  <% Category.all.each do |category| %>
<label>
<%= check_box_tag "product[category_ids][]", category.id, field.object.categories.include?(Category) %>
<%= category.name_category %>
</label>
<%end%>

我无法显示类别名称。在 show.html.erb 中我尝试了所有方法,但它只显示产品所属类别的 ID。

如何显示类别名称?在数据库中,我可以执行 JOIN,但在 Ruby on Rails 中,这很困难。

最佳答案

它不能在 Rails 中将关系存储在数组列中。您可以加载必要的类别并通过类别id访问。

# for single product
category_ids = product.category_ids
# for many products
category_ids = products.flat_map(&:category_ids)

# load categories
categories = Category.where(id: category_ids).index_by(&:id)
# the result structure
# {1 => #<Category id: 1, ...>, 2 => #<Category id: 2, ...> ... }

# now all related categories preloaded
products.each do |product|
product.category_ids.each do |category_id|
puts categories[category_id]
end
end

关于ruby-on-rails - 如何使用连接表显示元素列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43523283/

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