データを入力するために、レールでグリッドを構築しようとしています。行と列があり、行と列はセルで結合されています。私の見解では、グリッドがエッジに「新しい」行と列を持つことを処理できるようにする必要があるため、それらを入力して送信すると、それらは自動的に生成され、共有セルがそれらに正しく接続されます. JSなしでこれを実行できるようにしたい。
Rails のネストされた属性は、新しいレコードと新しい列の両方にマップされていることを処理できません。どちらか一方しか実行できません。その理由は、それらが 2 つのモデルの 1 つに特にネストされており、ネストされていない方には ID がなく (まだ存在しないため)、最上位の Grid モデルで accept_nested_attributes_for を介してプッシュされるためです。 、ネストされたもののために作成された新しいオブジェクトにのみバインドされます。
どうすればこれを処理できますか? ネストされた属性のレール処理をオーバーライドする必要がありますか?
私のモデルは次のようになります。
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