多对多关系并创造新记录?

时间:2015-06-29 21:36:19

标签: ruby-on-rails

A和B有多对多的关系。在B的视图中,我有一个表单来创建一个新的B,其中包含一个新名称和一个新的A(或许多)关联。

例如:

创建新B

名称: 答:

创建新A时也会做同样的事情。我该怎么做?控制器/视图/模型是什么样的?

1 个答案:

答案 0 :(得分:0)

通常,当两个表之间具有多对多关系时,需要连接表,因为数据库不能水平扩展。

首先创建你的联接表:

class AsBs< ActiveRecord::Migration
  def change
    create_table :as_bs do |t|
      t.integer :as_id
      t.integer :bs_id
    end
  end
end

然后在你的模特中:

class A < ActiveRecord::Base
  has_many :bs, through: :as_bs
end


class B < ActiveRecord::Base
  has_many :as, through: as_bs
end

启动Rails控制台,了解如何与数据库中的关联数据进行交互和访问。

现在在这里创建一个记录是你应该在AsBsController中做的事情:

  def create
      @asbs = AsBs.find_or_create_by(as_id : params[:as_id], bs_is: params[bs_id]

  end

然后保存记录。