这在技术上叫什么?

dd-s

长期的SO读者,第一次的海报。我有一个项目,该项目的模型具有相同的场模型的has_one字段和has_many。我只是希望能够使它们分开区分。这是我想到的最优雅的方法。

我想知道我应该如何口头提及我正在使用的当前方法,如果有更好的方法可以做到这一点,那就是Rails 4+。

这是我正在使用的代码:

    # field.rb
    class Field < ActiveRecord::Base
      belongs_to :user
    end

    # user.rb
    class User < ActiveRecord::Base
      has_one :primary_field, class_name: 'Field'
      has_many :secondary_fields, class_name: 'Field'
    end

u = User.create(name:"foo")
u.primary_field = Field.create(name:"ruby on rails")
u.secondary_fields << Field.create(name:"html/css") 
u.secondary_fields << Field.create(name:"javascript")

编辑:我的方法中存在错误,从技术上讲,secondary_fields的作用域不正确。我批准的答案解决了这个问题。

我仍然想知道这是否被称为特定的东西,因为它确实似乎是相对经常使用的。

詹姆斯·梅森

您需要一种方法来区分哪个字段是主要字段。现在,您存储的所有字段都相同,因此您将从secondary_fields关联中获取所有这三个字段,并且字段primary_field实际上是随机的(取决于您使用的数据库)。

如果您向“字段”添加“主”列,则可以使用如下所示的内容:

# field.rb
class Field < ActiveRecord::Base
  belongs_to :user
  validates :primary, uniqueness: {scope: user, if: :primary}
end

# user.rb
class User < ActiveRecord::Base
  has_one :primary_field, -> {where(primary: true), class_name: 'Field'
  has_many :secondary_fields, -> {where(primary: false)}, class_name: 'Field'
end

u = User.create(name:"foo")
u.primary_field = Field.create(name:"ruby on rails", primary: true)
u.secondary_fields << Field.create(name:"html/css") 
u.secondary_fields << Field.create(name:"javascript")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

这在技术上叫什么?

来自分类Dev

这段代码在技术上是否有效?

来自分类Dev

Windows用户在技术上是否与AD用户相同?

来自分类Dev

在技术上是否可以发布部分 JRE?

来自分类Dev

此C ++代码在技术上会发生什么?

来自分类Dev

此C ++代码在技术上会发生什么?

来自分类Dev

从技术上讲,什么是 GIT?

来自分类Dev

使用磁盘加密的预引导身份验证在技术上如何工作?

来自分类Dev

使用磁盘加密的预引导身份验证在技术上如何工作?

来自分类Dev

从HDD到SSD的克隆方法在技术上是否正确?

来自分类Dev

<HTML lang="en"> 在技术上是一个 HTML 标签吗?

来自分类Dev

C ++在技术上如何在没有副本的情况下移动函数返回值?

来自分类Dev

声称使用IP地址建立了TCP / IP连接在技术上是不正确的吗?

来自分类Dev

使用ArrayList(或更好的链表)编写我自己的队列在技术上是否正确?[下面的Java代码]

来自分类Dev

C ++在技术上如何在没有副本的情况下移动函数返回值?

来自分类Dev

当您将<div>高度设置为100%时,页面上的其他内容在技术上是怎么回事?

来自分类Dev

C 中的类型声明等价:这些类型在技术上是相同的,还是在实用上相同?

来自分类Dev

当您将<div>高度设置为100%时,页面上其他内容在技术上会发生什么变化?

来自分类Dev

这种技术叫什么?

来自分类Dev

使用隐式展开的可选对象是否存在技术上的弊端,但要测试nil与可选绑定之间的关系?

来自分类Dev

当我们在浏览器中输入url并按Enter时,rails在技术上如何处理请求

来自分类Dev

在EJB 3.1中,容器代理在技术上如何有效地欺骗我的无接口对象?

来自分类Dev

在keras模型指标中使用简单的“准确性”进行多类分类在技术上是否错误?我们应该使用CategoricalAccuracy()吗?

来自分类Dev

在EJB 3.1中,容器代理在技术上如何有效地欺骗我的无接口对象?

来自分类Dev

当我们在浏览器中输入url并按Enter时,rails在技术上如何处理请求

来自分类Dev

具有相同SSID /密码的两个无线网络会(在技术上)被视为一个吗?

来自分类Dev

出于某种原因,即使查询在技术上符合条件,它也返回除 2 条记录以外的所有记录

来自分类Dev

编码技术叫什么?功能[]()

来自分类Dev

Sakai 10(与Sakai 2.9相比)在技术上有哪些改进(不是功能)?

Related 相关文章

  1. 1

    这在技术上叫什么?

  2. 2

    这段代码在技术上是否有效?

  3. 3

    Windows用户在技术上是否与AD用户相同?

  4. 4

    在技术上是否可以发布部分 JRE?

  5. 5

    此C ++代码在技术上会发生什么?

  6. 6

    此C ++代码在技术上会发生什么?

  7. 7

    从技术上讲,什么是 GIT?

  8. 8

    使用磁盘加密的预引导身份验证在技术上如何工作?

  9. 9

    使用磁盘加密的预引导身份验证在技术上如何工作?

  10. 10

    从HDD到SSD的克隆方法在技术上是否正确?

  11. 11

    <HTML lang="en"> 在技术上是一个 HTML 标签吗?

  12. 12

    C ++在技术上如何在没有副本的情况下移动函数返回值?

  13. 13

    声称使用IP地址建立了TCP / IP连接在技术上是不正确的吗?

  14. 14

    使用ArrayList(或更好的链表)编写我自己的队列在技术上是否正确?[下面的Java代码]

  15. 15

    C ++在技术上如何在没有副本的情况下移动函数返回值?

  16. 16

    当您将<div>高度设置为100%时,页面上的其他内容在技术上是怎么回事?

  17. 17

    C 中的类型声明等价:这些类型在技术上是相同的,还是在实用上相同?

  18. 18

    当您将<div>高度设置为100%时,页面上其他内容在技术上会发生什么变化?

  19. 19

    这种技术叫什么?

  20. 20

    使用隐式展开的可选对象是否存在技术上的弊端,但要测试nil与可选绑定之间的关系?

  21. 21

    当我们在浏览器中输入url并按Enter时,rails在技术上如何处理请求

  22. 22

    在EJB 3.1中,容器代理在技术上如何有效地欺骗我的无接口对象?

  23. 23

    在keras模型指标中使用简单的“准确性”进行多类分类在技术上是否错误?我们应该使用CategoricalAccuracy()吗?

  24. 24

    在EJB 3.1中,容器代理在技术上如何有效地欺骗我的无接口对象?

  25. 25

    当我们在浏览器中输入url并按Enter时,rails在技术上如何处理请求

  26. 26

    具有相同SSID /密码的两个无线网络会(在技术上)被视为一个吗?

  27. 27

    出于某种原因,即使查询在技术上符合条件,它也返回除 2 条记录以外的所有记录

  28. 28

    编码技术叫什么?功能[]()

  29. 29

    Sakai 10(与Sakai 2.9相比)在技术上有哪些改进(不是功能)?

热门标签

归档