Rails - 正确的关系数据库配置挣扎

时间:2015-03-30 13:47:34

标签: ruby-on-rails database model

我想创建一个数据库,用于定义任意数量的用户创建的"节点"并允许任意数量的用户定义"连接"在节点之间。

我的膝跳反应是创建一个节点模型和连接模型。将节点模型配置为has_many:connections。但是,我希望连接是定向的"来自和#34;。播种看起来像这样:

Node.create( name:'n1' )
Node.create( name:'n2' )
Connection.create( from: Node.find_by(name: 'n1'), to: Node.find_by(name: 'n2'))

可能......

Connection.create( from: Node.find_by(name: 'n2'), to: Node.find_by(name: 'n1'))

当然不是说这是做到这一点的最好方法,只是试着想一下结构。所以问题......

我会在节点模型的连接模型中添加哪种关联(如果有的话)?我认为我过于复杂,也许正确的做法是在关于节点的连接中没有关联,而只是要求并检查以下内容的唯一性:from和:to for new Connection?< / p>

提前致谢。

1 个答案:

答案 0 :(得分:0)

您通常不会创建一个对象,然后再次将其加载回数据库:您通常只是将其保存在变量中,如下所示:

node_1 = Node.create( name:'n1' )
node_2 = Node.create( name:'n2' )
Connection.create( from: node_1, to: node_2)

我会避免让一个名为&#34;来自&#34;因为它是一个sql关键字,虽然这并不会使它成为非法(因为rails会逃脱它),它会产生一些令人困惑的sql。我就像

那样做
class Node
  has_many :from_connections, :class_name => "Connection", :as => :from_node
  has_many :to_connections, :class_name => "Connection", :as => :to_node

  def connections
    self.from_connections + self.to_connections
  end

class Connection
  #has association fields "from_node_id" and "to_node_id"
  belongs_to :to_node, :class_name => "Node"
  belongs_to :from_node, :class_name => "Node"

然后,您可以添加其他方法,以便更简单地创建连接,例如Node#connect_to(node)或其他。