我需要将我丰富的多对多关联表限制为每个唯一的par只有一个关联。 (导轨)。
这意味着我希望终端(模型1)和订阅(模型2)拥有一个custom_price(富连接),而不是更多。
这怎么做得最优雅?
到目前为止,我已经完成了:
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
答案 0 :(得分:3)
你可以做两件事来处理这个问题:(假设“价格”是多对多关系的独特部分)
1)CustomPrice中的验证
validates :price, uniqueness: {scope: [:terminal_id, :subscription_id]}
2)使用助手
CustomPrice.find_or_create_by(custom_price_params.merge( :terminal_id => @terminal_id, :subscription_id => @subscription_id))