Делегированный тип Rails 6.1 - реализация контроллеров
В настоящее время я экспериментирую с новой функцией Rails 6.1,
Delegated types
, что кажется лучшей альтернативой для предотвращения ИППП. (rubyonrails.org: DelegatedType - GitHub: запрос на перенос )
После долгих поисков я нашел некоторые ресурсы об этой функции, но все они описывают то же самое, что и запрос на перенос (более или менее), но не контроллеры. Итак, я пытаюсь понять, как лучше всего писать контроллеры?
Для создания новых записей они предлагают:
# You create a new record that uses delegated typing,
# by creating the delegator and delegatee at the same time, like so:
Entry.create! entryable: Comment.new(content: "Hello!"), creator: Current.user
Но нужно ли это реализовать в каждом контроллере? У меня есть небольшой пример ниже:
классифицированный.rb
class Classified < ApplicationRecord
delegated_type :classifiedable, types: %w[ Car Bike ], dependent: :destroy
# scope :with_classifiedables, -> { includes(:classifiedable) }
end
classifieadable.rb
module Classifiedable
extend ActiveSupport::Concern
included do
has_one :classified, as: :classifiedable, touch: true
accepts_nested_attributes_for :classified
end
end
car.rb
class Car < ApplicationRecord
include Classifiedable
end
bike.gr
class Bike < ApplicationRecord
include Classifiedable
end
schema.rb
create_table "classifieds", force: :cascade do |t|
t.string "title"
t.text "description"
t.string "classifiedable_type"
t.integer "classifiedable_id"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
create_table "cars", force: :cascade do |t|
t.integer "seats"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
create_table "bikes", force: :cascade do |t|
t.integer "whells"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
Может ли кто-нибудь подсказать мне, как реализовать действие new-create для объявлений и хотя бы автомобилей? Car_params всегда терпит неудачу. Как видите, у меня есть название и описание, которые я хочу использовать как для автомобилей и мотоциклов, так и для их собственных атрибутов. Внутри каждой формы (в нашем примере формы автомобилей) я использую
f.fields_for :classified
для названия и описания.
Итак, он должен располагаться в / ads / cars / new и иметь во внешнем интерфейсе:
Создавая машину, это также должно создавать засекреченную запись, верно?
Спасибо за ваше время и любые советы приветствуются :)