Ответ 1
Мы не можем сделать это через строительные леса. Мы должны отредактировать модель класса, чтобы установить отношение многих ко многим.
Теперь я делаю проект по рубину на рельсах. Я создал объект с именем product, и я хочу установить отношение many to many к другому объекту с именем category.
script/generate scaffold product prd_name:string category:references
Выполняя этот код, возможно одно-одно сопоставление. Как я могу установить многие из многих без жесткого кодирования?
Мы не можем сделать это через строительные леса. Мы должны отредактировать модель класса, чтобы установить отношение многих ко многим.
Вы не должны рассчитывать на то, что сможете создавать свое приложение только с помощью лесов. Он предназначен только для того, чтобы привести пример для начала работы.
Наиболее гибкий вид отношений "многие-ко-многим" в рельсах называется имеет много сквозных. Для этого требуется таблица соединений, которая в этом случае обычно называется категоризацией. Ему понадобится столбец 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
в первых двух командах. Опять же, я не рекомендую его, кроме как способ увидеть пример, чтобы учиться.
Можно создать модель со ссылками с такой командой
$ rails generate model Comment commenter:string body:text post:references
См. http://guides.rubyonrails.org/getting_started.html#generating-a-model
Теперь можно создать эшафот со ссылками с такой командой
$ rails generate scaffold Comment commenter:string body:text post:references