我想创建一个数据库,用于定义任意数量的用户创建的"节点"并允许任意数量的用户定义"连接"在节点之间。
我的膝跳反应是创建一个节点模型和连接模型。将节点模型配置为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>
提前致谢。
答案 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)
或其他。