我是Rails的新手。目前我正在开发Rails5API。
有两种模型。
BLOCK
block_name
--------------------------------
EMPLOYEE
name
email
block_ids (string)
关系
Employee
has_many: blocks
Block
belongs_to: user
员工控制区块。当用户创建员工时,他必须指定此员工控制的区块。
这是post请求的主体。
{
"first_name":"John",
"last_name": "Smith",
"email": "smith@gmail.com",
"block_ids": "9,5,3"
}
所以John Smith控制is等于9,5和3的区块。我认为这种方法不好。
这是用户控制器的创建操作
def create
@user = current_organization.employees.build(user_params)
if @user.save!
render json: @user
else
head :unprocessable_entity
end
end
如何有效地将外键存储到多个块?你能给我推荐些什么?
发布于 2017-08-01 05:40:57
如果您有1xn
关系(一个员工有多个块),就不应该对员工使用block_ids
。您应该在block
模型上使用employee_id
。然后在block.rb
上添加belongs_to :employee
。
但是,如果是nxn
关系(多对多),则必须创建另一个模型来实现该关系,如具有employee_id
和block_id
的EmployeeBlock
。类似于:
class EmployeeBlock < ApplicationRecord
belongs_to :employee
belongs_to :block
end
在你的employee.rb上,就像这样:
has_many :employee_blocks
has_many :blocks, through: employee_blocks
对于block.rb,反之亦然。
更新:为了创建nxn关系表,您可以像这样生成模型:
rails g model EmployeeBlock employee:references block:references
这样,它将创建包含外键和belongs_to关系的表。
对于表单,在您的情况下,我认为为您的用户创建一个具有嵌套关联的表单是合理的。这有点复杂,所以我建议在这个例子中看一下,我认为它会很清楚:http://www.createdbypete.com/articles/working-with-nested-forms-and-a-many-to-many-association-in-rails-4/
https://stackoverflow.com/questions/45424650
复制相似问题