丰富的多对多关联。只允许一条记录

时间:2014-01-09 18:13:21

标签: ruby-on-rails many-to-many has-and-belongs-to-many

我需要将我丰富的多对多关联表限制为每个唯一的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

1 个答案:

答案 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))