如何在rails 3.1.0中以多对多关系保存配对ID?

时间:2012-01-11 05:10:41

标签: ruby-on-rails ruby-on-rails-3.1

这个问题非常棘手。 App有一个rfq模型:

class Rfq < ActiveRecord::Base
  has_and_blongs_to_many :standards
end

表rfqs_standards仅创建了两列:一个用于rfq_id,另一个用于standard_id。

以rfq新形式嵌入标准选择。以下是html页面的来源:

  <div class="input select optional">
    <label class="select optional" for="rfq_standard_ids"> Standard:</label>
    <select class="select optional" id="rfq_standard_ids" multiple="multiple" name="rfq[standard_ids][]" size="5">
      <option value="1">FCC15</option>
      <option value="2">Roth EU</option>
    </select>
  </div>

从源头可以看出,rfq [standard_ids]将携带标准的输入值。

我的问题是如何将rfq_id和standard_id对保存到表rfqs_standards以及保存rfq?

在rfq模型中定义了一个setter,用于将id保存到rfqs_standards中。然而,setter所做的只是保存相同的rfq 3次(在rfq新页面上有3个标准选择)并且没有做任何保存id对。二传手是:

  def standard_ids=(attributes)
    attributes.each do |attr|
      standards.build(attr)
    end
  end

有什么想法?感谢。

1 个答案:

答案 0 :(得分:0)

这是解决方案。在创建rfq控制器时,添加:

  #save into join table rfqs_standards
  params[:rfq][:standard_ids].each do |sid|
    @rfq.standards << Standard.find(sid.to_i)
  end

此循环将所选的每个标准添加到@ rfq.standards。当@ rfq.save时,对id被保存到连接表rfqs_standards。