J'essaye de construire une grille, dans des rails, pour entrer des données. Il a des lignes et des colonnes, et les lignes et les colonnes sont jointes par des cellules. À mon avis, j'ai besoin que la grille puisse gérer de nouvelles lignes et colonnes sur le bord, de sorte que si vous les saisissez et que vous les soumettez, elles sont générées automatiquement et leurs cellules partagées sont correctement connectées . Je veux être en mesure de le faire sans JS.Rails attributs imbriqués avec un modèle de jointure, où l'un des modèles joint est un nouvel enregistrement
Les attributs imbriqués Rails ne parviennent pas à être mappés à la fois sur un nouvel enregistrement et sur une nouvelle colonne, ils ne peuvent effectuer que l'un ou l'autre. La raison en est qu'ils sont imbriqués spécifiquement dans l'un des deux modèles, et quel que soit celui dans lequel ils ne sont pas imbriqués n'aura aucun id (puisqu'il n'existe pas encore), et lorsqu'il est poussé par accepts_nested_attributes_for sur le modèle Grid de niveau supérieur , ils seront seulement liés au nouvel objet créé pour tout ce qu'ils ont été imbriqués.
Comment puis-je gérer cela? Dois-je contourner la gestion des rails des attributs imbriqués?
Mes modèles ressemblent à ceci, BTW:
class Grid < ActiveRecord::Base
has_many :rows
has_many :columns
has_many :cells, :through => :rows
accepts_nested_attributes_for :rows,
:allow_destroy => true,
:reject_if => lambda {|a| a[:description].blank? }
accepts_nested_attributes_for :columns,
:allow_destroy => true,
:reject_if => lambda {|a| a[:description].blank? }
end
class Column < ActiveRecord::Base
belongs_to :grid
has_many :cells, :dependent => :destroy
has_many :rows, :through => :grid
end
class Row < ActiveRecord::Base
belongs_to :grid
has_many :cells, :dependent => :destroy
has_many :columns, :through => :grid
accepts_nested_attributes_for :cells
end
class Cell < ActiveRecord::Base
belongs_to :row
belongs_to :column
has_one :grid, :through => :row
end