将多个外键保存在一个模型属性中

时间:2017-07-31 20:22:11

标签: ruby-on-rails json api rails-activerecord

我是Rails的新手。目前我正在开发Rails 5 API。

有两种型号。

set disable-randomization off

关系

BLOCK
block_name
--------------------------------
EMPLOYEE
name
email
block_ids (string)

员工控制块。当用户创建员工时,他必须指定此员工控制的块。

这是邮寄请求的正文。

Employee
has_many: blocks

Block
belongs_to: user

所以John Smith控制了id等于9,5和3的块。我想这种方法并不好。

这是用户控制器的创建操作

{
    "first_name":"John",
    "last_name": "Smith",
    "email": "smith@gmail.com",
    "block_ids": "9,5,3"
}

如何有效地将外键存储到多个块?你会建议我什么?

1 个答案:

答案 0 :(得分:1)

如果您有1xn关系(一名员工有很多区块),您就不应该在员工身上使用block_ids。您应该在employee_id型号上使用block。然后在belongs_to :employee上添加block.rb

但是,如果它与nxn关系(多对多),您必须创建另一个模型来执行该关系,例如EmployeeBlock,其中employee_id和{ {1}}。类似的东西:

block_id

以及您的employee.rb,例如:

class EmployeeBlock < ApplicationRecord
  belongs_to :employee
  belongs_to :block
end

反之亦然block.rb。

更新:  要创建该nxn关系表,您可以生成如下模型:

has_many :employee_blocks
has_many :blocks, through: employee_blocks

这样,它将使用外键和belongs_to关系创建表。

对于表单,在您的情况下,我认为为您的用户提供嵌套关联的表单是合理的。这有点复杂,所以我建议看看这个例子,认为它会说清楚: http://www.createdbypete.com/articles/working-with-nested-forms-and-a-many-to-many-association-in-rails-4/