Как отобразить записи таблицы с ассоциациями в Rails? - PullRequest
0 голосов
/ 22 апреля 2019

Я создаю таблицу с источником ассоциации согласно этой документации .

Здесь есть три таблицы со связями и отношениями следующим образом

Категория Таблица является главной таблицей

Таблица продукта относится к таблице категорий, где ее product_id ссылается на категорию (идентификатор)

Продажа таблица относится к таблице Product, где ее sale_id ссылается на идентификатор продукта (id)

Когда я запустил миграцию кода, она прошла успешно, и я смог отобразить содержимое таблицы категорий.

Теперь я хочу также отобразить содержимое таблицы Product и sale согласно этой строке кода

@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

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Я ссылаюсь на предложение, найденное здесь , и таким образом обнаруживает, что мне нужно добавить ассоциацию во все мои модели.

Я также следую комментарию arieljuod , когда он сказал, что вывод всех данных categor не имеет смысла.

Итак, сначала в контроллере я использовал 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
0 голосов
/ 22 апреля 2019

Поскольку @prod является ActiveRecord_Relation, вы не можете справиться с этим напрямую. Вы должны сопоставить или выбрать sales

@sal = @prod.each.map(&:sales)

или

@sal = Sale.where(product_id: @prod.ids)

для ActiveRecord_Relation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...