Ruby 1.9.2 p290和Rails 3.0.9
我有一个.rb文件结构如下:
module M1
# .... some method defs ...
# Code in the middle, outside of any def:
if Rails.version >= '3'
class Railtie < ::Rails::Railtie
ActiveSupport.on_load :action_controller do
ActionController::Base.send :include, ::M1::M2 # <- throws an error..
end
end
end
module M2
# ... method defs ...
end
end
Run Code Online (Sandbox Code Playgroud)
该行ActionController::Base.send :include, ::M1::M2抛出一个NameError - 它找不到M2.
但是,当我将M2移动到M1的顶部时,它会毫无问题地解析引用.这只是Ruby的工作原理 - 解释器不会在第一遍中获取范围内的所有有效名称吗?你能解释一下这种行为吗?
我的数据库结构是这样的:一个通过表OptiUser属于多个UserGroups IdentityMap,这是一个匹配的表(多对多),附加了一些附加属性。每个UserGroup都有多个OptiDashboards。
我有一个标识特定用户的 GUID 字符串(wlid在此代码中)。我想获得的IEnumerable所有的OptiDashboards供标识的用户wlid。
这两个 Linq-to-Entities 查询中哪个最有效?它们在后端的运行方式是否相同?
另外,我可以将选项 2 的Include语句缩短为仅.Include("IdentityMaps.UserGroup.OptiDashboards")吗?
using (OptiEntities db = new OptiEntities())
{
// option 1
IEnumerable<OptiDashboard> dashboards = db.OptiDashboards
.Where(d => d.UserGroups
.Any(u => u.IdentityMaps
.Any(i => i.OptiUser.WinLiveIDToken == wlid)));
// option 2
OptiUser user = db.OptiUsers
.Include("IdentityMaps")
.Include("IdentityMaps.UserGroup")
.Include("IdentityMaps.UserGroup.OptiDashboards")
.Where(r => r.WinLiveIDToken == wlid).FirstOrDefault();
// then I would get the dashboards through …Run Code Online (Sandbox Code Playgroud)