长期的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] 删除。
我来说两句