Reputation: 6493
I need to limit my rich many-to-many association table to only one association per unique par. (rails).
That means i want terminals (model 1) and subscriptions (model 2) to have one custom_price (rich join) not any more than that.
How is this done most elegantly?
So far i have done:
def new_custom_price
@terminal_id = params[:terminal_id]
@subscription_id = params[:subscription_id]
@custom_price = CustomPrice.find_or_initialize_by_terminal_id_and_subscription_id( @terminal_id, @subscription_id)
render action: 'custom_price'
end
def create_custom_price
@terminal_id = params[:terminal_id]
@subscription_id = params[:subscription_id]
@custom_price = CustomPrice.new(custom_price_params.merge( :terminal_id => @terminal_id, :subscription_id => @subscription_id))
respond_to do |format|
if @custom_price.save
format.js { render action: 'add_custom_price' }
else
format.js { }
end
end
end
Upvotes: 0
Views: 251
Reputation: 2784
Two things you can do to handle this: (This is assuming "price" is the unique part of the many to many relationships)
1) Validation in CustomPrice
validates :price, uniqueness: {scope: [:terminal_id, :subscription_id]}
2) Use helpers
CustomPrice.find_or_create_by(custom_price_params.merge( :terminal_id => @terminal_id, :subscription_id => @subscription_id))
Upvotes: 3