首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一个模型属性中保存多个外键

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

Stack Overflow用户
提问于 2017-08-01 04:22:11
回答 1查看 249关注 0票数 0

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

有两种模型。

代码语言:javascript
运行
复制
BLOCK
block_name
--------------------------------
EMPLOYEE
name
email
block_ids (string)

关系

代码语言:javascript
运行
复制
Employee
has_many: blocks

Block
belongs_to: user

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

这是post请求的主体。

代码语言:javascript
运行
复制
{
    "first_name":"John",
    "last_name": "Smith",
    "email": "smith@gmail.com",
    "block_ids": "9,5,3"
}

所以John Smith控制is等于9,5和3的区块。我认为这种方法不好。

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

代码语言:javascript
运行
复制
def create
  @user = current_organization.employees.build(user_params)
  if @user.save!
     render json: @user
  else
     head :unprocessable_entity
  end
end

如何有效地将外键存储到多个块?你能给我推荐些什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-01 05:40:57

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

但是,如果是nxn关系(多对多),则必须创建另一个模型来实现该关系,如具有employee_idblock_idEmployeeBlock。类似于:

代码语言:javascript
运行
复制
class EmployeeBlock < ApplicationRecord
  belongs_to :employee
  belongs_to :block
end

在你的employee.rb上,就像这样:

代码语言:javascript
运行
复制
has_many :employee_blocks
has_many :blocks, through: employee_blocks

对于block.rb,反之亦然。

更新:为了创建nxn关系表,您可以像这样生成模型:

代码语言:javascript
运行
复制
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/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45424650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档