我现在已经很久了。不确定我的方法是否正确或是否使用mongoid是不可能的。所以没有进一步的问题,这就是问题所在:
我有以下两种型号:
def user
embeds_many :needs, :class_name => "Property"
embeds_many :skills, :class_name => "Property"
end
def property
end
这两个模型当然都有其他代码,但为了简洁,我跳过了这些代码。 通过这种结构,我能够访问/添加“属性”数据作为嵌入式“需求”&我的用户模型上的“技能”。像这样的东西完美无缺
User.first.update_attributes(skills: [Property.first])
问题是这样的事情不起作用。
User.first.skills.push(Property.first)
User.first.skills << Property.first
没有错误。以上两个语句在控制台上都返回true。但这些值不会持续存在于DB中。
我基本上想要一个可以独立于User模型维护/创建的Property模型,这就是为什么我的代码中缺少Property上的“embedded_in”。
问题是,我做得对吗?或者他们应该采用不同的方式来设计这些模型?
答案 0 :(得分:1)
凯奇是对的。如果希望持久性正常工作,则需要将embedded_in放在Property模型上。如果要在User模型之外管理Property的生命周期,则必须使用'has_many'。
请添加更多详细信息,了解您正在做的事情的目的究竟是什么。我将做一些假设 -
如果以上是正确的,那么您可以使用自定义键来存储需求和技能 -
class Property
include Mongoid::Document
field :text, :type => String
field :_id, type: String, default ->{ text }
end
class User
include Mongoid::Document
has_many :needs, :class_name => "Property"
has_many :skills, :class_name => "Property"
end
现在你可以做类似的事情 -
User.first.need_ids
这将提供需要的文本,您可以避免另一个查询。 注意 - 如果您的'Property'对象是可变的,这可能会非常危险。
答案 1 :(得分:0)
对于解决方案,请尝试执行此操作
u = User.first
u.skills.push(Property.first)
u.skills << Property.first
它会正常工作。