Neo4j在Rails中与ActiveNode和Bootstrap Multiselect创建多个关系

时间:2015-07-15 01:57:07

标签: ruby-on-rails twitter-bootstrap neo4j

我正在玩Neo4j和Rails,我创建了一个使用ActiveNode创建新节点和关系的应用程序。这是我目前的数据模型:

(company1)-[:RESEARCHING]->(market1)
(company2)-[:RESEARCHING]->(market2)

我有一个公司页面,其下拉菜单包含“market1”和“market2”。当我创建公司时,我可以选择“market1”,并在该公司和“market1”之间创建新的关系。如果我更新公司,我可以更改下拉列表中的项目,它将删除旧关系并创建一个新关系。

我想要做的是将此下拉菜单挂钩到Bootstrap Multiselect,这样我就可以从我的下拉列表中选择多个市场,一次创建多个关系。像这样:

(market2)<-[:RESEARCHING]-(company1)-[:RESEARCHING]->(market1)

我找到了大部分内容,我的Bootstrap菜单可以工作,但不会更新数据库。我只是不知道在提交时添加关系的这段代码放在哪里:

@company.market.try(:id)

(至少我认为确实如此。)有关如何做到这一点的任何想法?提前谢谢!

这是我的代码:

<!-- Current working form. -->
<div class="field">
  <%= f.label :market %><br>
  <%= f.select "market", 
  options_from_collection_for_select(Market.all, "id", "name", @company.market.try(:id)) %> 
</div>

<div class="actions">
  <%= f.submit %>
</div>

<!-- The form I would like to create. -->
<form id="form1">
  <div style="padding:20px">
    <select id="market" multiple="multiple">
      <% @markets.each do |market| %>
        <option name="<%= market.name %>" value="<%= market.name %>"><%= market.name %></option>
      <% end %>
    </select><br><br>

  <div class="actions" id="submit" value="Submit">
    <%= f.submit %>
  </div>

  <script type="text/javascript">
    $(function() {
      $('#market').multiselect({
       includeSelectAllOption: true
      });
      $('#submit').click(function() {
      })
    });
  </script>
 </div>
</form>

1 个答案:

答案 0 :(得分:0)

请耐心等待,我以前没有和options_from_collection_for_select合作过。看起来它只需要知道表单是否已经选择了这个,所以我认为最好先计算出来,然后根据该列表检查每个市场。 API docs看起来我们可以给出一个proc,所以也许是这样的?

<% @selected_markets = @company.markets(:m).pluck('m.uuid') %>
<%= f.select "market", 
  options_from_collection_for_select(Market.all, "id", "name", proc { |market| @selected_markets.include?(market.uuid) }) %>

这假设您在markets模型上有Company个关联。