我正在使用关联源as per this documentation创建表。
这里有三个具有关联和关系的表,
类别表是主表
Product 表属于categor表,其product_id引用categor(id)
销售表属于产品表,其sale_id引用产品(id)
当我运行代码迁移时,它成功了,并且可以显示categor表的内容。
现在,我还要根据此代码行显示产品和销售表的内容
@prod = @categors.products.all
@sal = @prod.sales.all
但显示错误
undefine method products for #<Categor:ActiveRecord_Relation>
这是正在进行的迁移
类别迁移
class CreateCategors < ActiveRecord::Migration[5.2]
def change
create_table :categors do |t|
#has_one :product
#has_one :sale, :through => :product
t.string :cat_name
t.string :car_label
t.timestamps
end
end
end
产品迁移
class CreateProducts < ActiveRecord::Migration[5.2]
def change
create_table :products do |t|
t.belongs_to :categor, index: true
t.string :prod_name
t.string :prod_desc
t.timestamps
end
end
end
销售迁移
class CreateSales < ActiveRecord::Migration[5.2]
def change
create_table :sales do |t|
t.belongs_to :product, index: true
t.string :sales_name
t.string :sales_desc
t.timestamps
end
end
end
categor_controller
class CategorsController < ApplicationController
before_action :set_categor, only: [:show, :edit, :update, :destroy]
def index
@categors = Categor.all
@prod = @categors.products.all
@sal = @prod.sales.all
end
更新部分
class Categor < ApplicationRecord
end
class Product < ApplicationRecord
end
class Sale < ApplicationRecord
end
答案 0 :(得分:0)
因为@prod
是ActiveRecord_Relation
,所以您不能直接处理它。
您必须映射或选择sales
@sal = @prod.each.map(&:sales)
或
@sal = Sale.where(product_id: @prod.ids)
ActiveRecord_Relation
答案 1 :(得分:0)
我引用了a suggestion found here,因此发现我需要将关联添加到我的所有模型中。
当他说显示所有categor
数据没有意义时,我也遵循 arieljuod 的评论。
因此,首先在控制器上,我按照以下代码对表find()
和categor
使用了product
方法:
class CategorsController < ApplicationController
before_action :set_categor, only: [:show, :edit, :update, :destroy]
def index
@categors = Categor.find(1)
@prod = @categors.products.find_by_categor_id(1)
@sal = @prod.sales.all
end
这是我的模特:
class Categor < ApplicationRecord
has_many :products
has_many :sales, :through => :products
end
class Product < ApplicationRecord
belongs_to :categor
has_many :sales
end
class Sale < ApplicationRecord
belongs_to :product
end