我是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"
}
如何有效地将外键存储到多个块?你会建议我什么?
答案 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/