小编Ale*_*ein的帖子

使用对象ID与将对象填充到其他类之间的权衡是什么?

编辑:早期的出色反应使我意识到,权衡取舍的问题将结合@Leo的变体会更有用。

我正在Code-First EF中开发数据模型,并且对可能相当基本的内容感到不熟练。

给定团队和玩家类,其中一个团队有N个玩家,则可以设计数据模型

1)以玩家作为成员子对象:

class Team
{
    int Id;
    ICollection<Player> Players;
}
Run Code Online (Sandbox Code Playgroud)

或2)(由于没有实际好处而被拒绝),我们可以将参考ID传递给玩家

class Team
{
    int Id;
    ICollection<int> PlayerIds;
}
Run Code Online (Sandbox Code Playgroud)

或3)使用外键ID实现以实现模型独立性

class Team
{
    int Id;
}

class Player
{
    int Id;
    int TeamId;
}
Run Code Online (Sandbox Code Playgroud)

我可以看到第三种方法的一些明显好处,如下@Leo所示。因此,也许在这一点上,我的问题最好被表述为“在哪种情况下,人们可能更喜欢采用变体1”?

c# entity-framework properties class

5
推荐指数
1
解决办法
942
查看次数

Ruby:如何在fixture中配置枚举?

鉴于此类:

class User < ActiveRecord::Base

enum permission: {
    permission_user: 1,
    permission_staff: 2,
    permission_manager: 3,
    permission_admin: 4,
    permission_super_admin: 5
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个看起来像这样的夹具:

testuser1:
  id: 1
  username: sam
  permission: :permission_staff
Run Code Online (Sandbox Code Playgroud)

我已经尝试了许多语法变体,但没有找到有用的东西.结果user.permission是nil或0.我知道枚举是相对较新的添加.可以这样做吗?

ruby enums unit-testing ruby-on-rails fixtures

5
推荐指数
1
解决办法
1282
查看次数

Rails STI:未按预期调用子类方法

我有这个STI实现:

class Instruction < ActiveRecord::Base
  def get_view
    return "I'm a pseudo abstract base method!"
  end
end

class SCreateWebPage < Instruction
  def get_view
    return "I'm doing terribly important things!"
  end
end
Run Code Online (Sandbox Code Playgroud)

我在Instruction类中添加了以下内容:

def self.inherited(child)
    child.instance_eval do
      def model_name
        Instruction.model_name
      end
    end
    super
  end

%w(S_create_web_page).each {|r| require_dependency r } if Rails.env.development? 
Run Code Online (Sandbox Code Playgroud)

=========

我的数据库表似乎正在其类型列中正确存储子类名称,并且我已经验证了子类已加载:

(rdb) Module.const_get("SCreateWebPage")
SCreateWebPage(id: integer, name: string, code: string, skwerkflow_id: integer, created_at: datetime, updated_at: datetime, factory_id: integer, type: string)
Run Code Online (Sandbox Code Playgroud)

===========

方法get_view在Instruction.rb的create方法中调用.我们的想法是,每个特定指令都可以有自己的观点.get_view是一个元编程元素,可以将正确的视图放在一起调用.

问题:当我在一个明确被实例化并保存为子类的指令上调用get_view时,它不是调用子类方法而是调用基类:

[30, 39] in /Users/alexedelstein/dev/skwerl/app/models/instruction.rb
   30    end
   31  
   32 …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails sti

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