Je ne suis pas sûr de la meilleure façon d'aborder ce scénario et apprécierais une certaine direction. Essentiellement, j'ai un scénario dans lequel je dois enregistrer les actifs d'une organisation.Polymorphique, STI ou autre
Il existe différents types d'actifs de sorte que les attributs diffèrent d'un type à cependant, il existe un certain nombre de domaines communs à tous les actifs tels que:
location
make
model
colour
purchase_date
warranty_period
similaires à: How to design a product table for many kinds of product where each product has many parameters
j'avais grâce à la création de ce que
one-to_many between Organisation and Asset
polymorhpic between Asset and Details
class Organisation < ApplicationRecord
has_many :assets
end
class Asset < ApplicationRecord
belongs_to :organisation
belongs to :detail, polymorphic: true
end
class CarAsset < ApplicationRecord
has_one :asset, as: :detail
end
class ComputerAsset < ApplicationRecord
has_one :asset, as: :detail
end
Ma question est: Je souhaite créer le détail & de l'actif dans une seule action de formulaire afin que l'utilisateur après avoir sélectionné le type d'actif crée une seule entrée de formulaire pour les deux modèles.
L'utilisateur cliquer sur un lien sur la page show d'organisation:
<%= link_to "New car asset", new_organisation_asset_path(@organisation, query: :new_car_asset) %>
Le dans mon contrôleur que je pouvais faire quelque chose de similaire à:
class AssetsController < ApplicationController
def new
@organisation = Organisation.find(params["organisation_id"])
@asset = @organisation.assets.new
case params[:query]
when "new_car_asset"
@details = @asset.car_assets.new
when "new_computer_asset"
@details = @asset.computer_assets.new
end
end
end
À mon avis, je pourrais aussi vérifier la valeur de params [: query] et rend le formulaire correspondant partiel qui se rapporte au type d'actif.
Est-ce que cela va dans le bon sens ou existe-t-il un meilleur moyen d'y parvenir? Il se sent tout à fait maladroit.