I'm trying to create a Product form that has multiple sizes and prices for each of those sizes.
They way I have it modelled is a has_many :through relationship. The associative table contains an extra field for price such that it will now hold the product_id, size_id, and price.
I'm not sure how I should go about creating my form or how Rails expects this to look. Any help would be much appreciated.
My Product is Cake :)
class Cake < ApplicationRecord
belongs_to :cake_type
has_many :cake_details
has_many :sizes, through: :cake_details
end
Size model
class Size < ApplicationRecord
has_many :cake_details
has_many :cakes, through: :cake_details
end
CakeDetail model class CakeDetail < ApplicationRecord belongs_to :cake belongs_to :size end
my migration
class CreateCakeDetails < ActiveRecord::Migration[5.1]
def change
create_table :cake_details do |t|
t.references :cake, foreign_key: true
t.references :size, foreign_key: true
t.decimal :price, :precision => 10, :scale => 2
t.timestamps
end
end
end
The only thing I'm stuck on is associating the form with the model. i.e. for every size I want to have a text box with price associated with it.
This is currently how I'm approaching it but I have no idea how rails expects the id's of the text box to look or how I should structure this.
This is currently what I'm experimenting with in my form
<%= collection_check_boxes(:cake, :size_ids, Size.all, :id, :name) do |b| %>
<tr>
<td>
<%= b.label %>
</td>
<td>
<%= b.check_box %>
</td>
<td>
<%= form.text_field :cake_detail, id: b.label %>
</td>
</tr>
<% end %>