Установка ссылок на таблицу через леса в рубинах

Теперь я делаю проект по рубину на рельсах. Я создал объект с именем product, и я хочу установить отношение many to many к другому объекту с именем category.

script/generate scaffold product prd_name:string category:references 

Выполняя этот код, возможно одно-одно сопоставление. Как я могу установить многие из многих без жесткого кодирования?

Ответ 1

Мы не можем сделать это через строительные леса. Мы должны отредактировать модель класса, чтобы установить отношение многих ко многим.

Ответ 2

Вы не должны рассчитывать на то, что сможете создавать свое приложение только с помощью лесов. Он предназначен только для того, чтобы привести пример для начала работы.

Наиболее гибкий вид отношений "многие-ко-многим" в рельсах называется имеет много сквозных. Для этого требуется таблица соединений, которая в этом случае обычно называется категоризацией. Ему понадобится столбец product_id, объявленный как belongs to :product и столбец category_id, объявленный как belongs_to :category. Три модели (включая модель соединения) будут объявлены таким образом:

# Table name: products
# Columns:
#   name:string

class Product < ActiveRecord::Base
  has_many :categorisations
  has_many :categories, through: :categorisations
end

# Table name: categories
# Columns:
#   name:string

class Category < ActiveRecord::Base
  has_many :categorisations
  has_many :products, through: :categorisations
end

# Table name: categorisations
# Columns:
#   product_id:integer
#   category_id:integer

class Categorisation < ActiveRecord::Base
  belongs_to :product
  belongs_to :category
end

Обратите внимание, что я назвал столбцы name, а не prd_name, так как это является удобочитаемым человеком и позволяет избежать избыточного повторения имени таблицы. Это настоятельно рекомендуется при использовании рельсов.

Модели могут быть сгенерированы следующим образом:

rails generate model product name
rails generate model category name
rails generate model categorisation product:references category:references

Что касается создания лесов, вы можете заменить model на scaffold в первых двух командах. Опять же, я не рекомендую его, кроме как способ увидеть пример, чтобы учиться.

Ответ 4

Теперь можно создать эшафот со ссылками с такой командой

$ rails generate scaffold Comment commenter:string body:text post:references