小编Nic*_*k B的帖子

Ruby Module NameError - 订单有关系吗?

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的工作原理 - 解释器不会在第一遍中获取范围内的所有有效名称吗?你能解释一下这种行为吗?

ruby module ruby-on-rails mixins

3
推荐指数
1
解决办法
1171
查看次数

实体框架包括 vs where

我的数据库结构是这样的:一个通过表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)

c# sql entity-framework azure-sql-database

2
推荐指数
1
解决办法
4643
查看次数