谁能向我解释mongoid embeds_many和has_manymongoid 之间的区别?
我有一个用户模型,它有投票方法.我想写代理方法进行投票.
这是可读的方式:
def vote_up item
return false unless can? :vote, item
vote item, :up
end
def vote_down item
return false unless can? :vote, item
vote item, :down
end
Run Code Online (Sandbox Code Playgroud)
这是干的方式:
%w(up down).each do |vtype|
define_method "vote_#{vtype}" do |item|
return false unless can? :vote, item
vote item, vtype.to_sym
end
end
Run Code Online (Sandbox Code Playgroud)
哪一个更好,为什么?
我在rails应用程序中定义了自定义配置变量(APP_CONFIG哈希).好的,现在我如何在模型中使用这些变量?在模型中直接调用APP_CONFIG ['variable']是一种非导轨方式!例如,我可以在没有Rails环境的情况下使用这些模型.然后没有定义APP_CONFIG.
ATM我使用模型观察器并使用实例变量分配全局配置变量,如下所示:
def after_initialize model
Mongoid.observers.disable :all do
model.user_id = APP_CONFIG['user_id'])
model.variable = User.find(model.user_id).variable
end
end
Run Code Online (Sandbox Code Playgroud)
但这个解决方案看起来像一个猴子补丁.还有更好的方法吗?
或者我应该保持最简单,只需在新应用程序(而不是Rails应用程序)中定义APP_CONFIG哈希?
我是mongoid的新人,我有两个基本的(我认为)问题.什么是在Mongoid中存储引用数组的最佳方法.这是我需要的简短示例(简单投票):
{
"_id" : ObjectId("postid"),
"title": "Dummy title",
"text": "Dummy text",
"positive_voters": [{"_id": ObjectId("user1id")}, "_id": ObjectId("user2id")],
"negative_voters": [{"_id": ObjectId("user3id")}]
}
Run Code Online (Sandbox Code Playgroud)
它是正确的方式?
class Person
include Mongoid::Document
field :title, type: String
field :text, type: String
embeds_many :users, as: :positive_voters
embeds_many :users, as: :negative_voters
end
Run Code Online (Sandbox Code Playgroud)
还是错了?
我也不确定,这种情况可能是一个糟糕的文档结构?如果用户已经投票并且不允许用户投票两次,我怎么能优雅地获得?也许我应该使用另一种文件结构?