2016-03-04 44 views
1

我正在研究neo4j rails項目,該項目涉及來自同一模型的節點之間的父 - 子類型關係。任何孩子可以有多個父母。我希望能夠在創建新的孩子時創建親子關係。我應該如何實現這一點?目前,該應用程序設置爲僅在創建子級時創建一個父子關係。Neo4jrb Rails項目:傳遞不定數量的參數以生成關係

# View for ...things/new 
<div class="new-thing-form"> 
    <%= form_for(@thing) do |f| %> 
    <%= f.text_field :name, placeholder: "Thing Name" %> 
    <%= text_field_tag :parent, '', placeholder: "Parent Name" %> 
    <%= f.submit "Create Thing" %> 
    <% end %> 
</div> 

# Model for Thing 
    class Thing 
    include Neo4j::ActiveNode 

    property :name, type: String 
    property :description, type: String 


    has_many :out, :children_things, type: :PARENT_OF, model_class: :Thing 
    has_many :in, :parent_things, model_class: :Thing, origin: :children_things 

    validates_presence_of :name 
    end 

我已經考慮了三種可能的解決方案,到目前爲止並在時遇到環繞我周圍的頭(我是新來的網絡發展,所以我道歉,如果這是基本的東西)。

  1. 動態添加字段

我已經簽出Railscasts插曲196和197,但是我使用有問題 「accepts_nested_attributes_for。」此外,這是相同模型的節點之間的關係,那麼是否有添加和刪除字段而不使用嵌套屬性的方法?

  • 創建多選列表
  • 有關於創建使用自舉和ActiveRecord多選菜單許多文章。我應該如何使用Neo4j來實現這些?

  • 爲PARENT_OF關係
  • 有沒有一種方法來創建通過形式邏輯關係創建ActiveRel?如果是這樣,那麼是否有一種方法可以與nested_attributes方法一起創建新的PARENT_OF關係,以創建子事物?

    對不起開放式問題。我一直在尋找幾天的時間,並且非常感謝一些指導,即使你可以指引我朝着正確的方向前進。任何建議都會有幫助。再次感謝。

    回答

    0

    我以前從未使用過accepts_nested_attributes_for。我知道我們已經討論過它,但我不記得我們是否實施過支持。有關於this GitHub issue的討論。也可以隨時停止我們的Gitter聊天室。

    雖然你可能不需要它。您應該能夠通過控制器參數在節點上創建關係has_onehas_many。如:

    Thing.create(name: params[:thing][:name], parent_things: params[:thing][:parents]) 
    

    params[:thing][:parents]應該是一個節點ID數組。然後當創建節點時,所有的關係都應該創建。

    當然,你也可以只通過在所有PARAMS爲thing

    Thing.create(name: params[:thing]) 
    

    但根據您的安全狀況,你可能想使用Rails的強大的參數,以確保人們不會傳遞他們不應該做的事情。

    編輯:

    響應您的評論的一些看法代碼:

    <div class="new-thing-form"> 
        <%= form_for(@thing) do |f| %> 
        <%= f.text_field :name, placeholder: "Thing Name" %> 
        <%= text_field_tag 'thing[parent][]', '', placeholder: "Parent Name" %> 
        <%= text_field_tag 'thing[parent][]', '', placeholder: "Parent Name" %> 
        <%= f.submit "Create Thing" %> 
        <% end %> 
    </div> 
    

    f.text_field標籤(我相信)會自動將它的字段名thing[name],所以text_field_tag與一起去那。通過把[]最後說出來,這將是一系列父母。所以參數Hash應該是類似於{thing: {name: 'Foo', parents: ['id1', 'id2']}}

    +0

    布賴恩,感謝您的迴應。我仍然對如何格式化視圖感到困惑,以便用戶在創建新節點時可以輸入無限數量的「parent_things」。我怎樣才能創建一個可以支持的表單? –

    +0

    剛做了一個編輯,試試了 –

    +0

    謝謝Brian。這確實在父id的params散列中創建了一個數組。在前端,每​​個標籤仍然只是一個文本字段。我調整了應用程序的工作流程,以便創建「事物」並添加「parent_things」由兩個單獨的視圖處理。感謝提示,瞭解如何在params散列中創建類似的數組非常有用。 –